목차
추천의 글 ... 4
저자진 소개 ... 7
저자 서문 ... 8
옮긴이의 말 ... 10
이 책을 잘 읽는 방법 ... 24
1장 개요 ... 29
   1.1 작업을 동시에 실행하는 일에 대한 (아주) 간략한 역사 ... 29
   1.2 스레드의 이점 ... 31
   1.3 스레드 사용의 위험성 ... 34
   1.4 스레드는 어디에나 ... 39
1부 기본 원리 ... 43
   2장 스레드 안전성 ... 45
      2.1 스레드 안전성이란? ... 47
      2.2 단일 연산 ... 50
      2.3 락 ... 55
      2.4 락으로 상태 보호하기 ... 60
      2.5 활동성과 성능 ... 62
   3장 객체 공유 ... 67
      3.1 가시성 ... 67
      3.2 공개와 유출 ... 75
      3.3 스레드 한정 ... 80
      3.4 불변성 ... 85
      3.5 안전 공개 ... 90
   4장 객체 구성 ... 97
      4.1 스레드 안전한 클래스 설계 ... 97
      4.2 인스턴스 한정 ... 103
      4.3 스레드 안전성 위임 ... 108
      4.4 스레드 안전하게 구현된 클래스에 기능 추가 ... 119
      4.5 동기화 정책 문서화 하기 ... 124
   5장 구성 단위 ... 129
      5.1 동기화된 컬렉션 클래스 ... 129
      5.2 병렬 컬렉션 ... 137
      5.3 블로킹 큐와 프로듀서-컨슈머 패턴 ... 142
      5.4 블로킹 메소드, 인터럽터블 메소드 ... 150
      5.5 동기화 클래스 ... 152
      5.6 효율적이고 확장성 있는 결과 캐시 구현 ... 162
2부 병렬 프로그램 구조 잡기 ... 173
   6장 작업 실행 ... 175
      6.1 스레드에서 작업 실행 ... 175
      6.2 Executor 프레임웍 ... 180
      6.3 병렬로 처리할 만한 작업 ... 190
   7장 중단 및 종료 ... 205
      7.1 작업 중단 ... 206
      7.2 스레드 기반 서비스 중단 ... 226
      7.3 비정상적인 스레드 종료 상황 처리 ... 240
      7.4 JVM 종료 ... 245
   8장 스레드 풀 활용 ... 251
      8.1 작업과 실행 정책 간의 보이지 않는 연결 관계 ... 251
      8.2 스레드 풀 크기 조절 ... 255
      8.3 ThreadPoolExecutor 설정 ... 257
      8.4 ThreadPoolExecutor 상속 ... 268
      8.5 재귀 함수 병렬화 ... 270
   9장 GUI 애플리케이션 ... 283
      9.1 GUI는 왜 단일 스레드로 동작하는가? ... 283
      9.2 짧게 실행되는 GUI 작업 ... 288
      9.3 장시간 실행되는 GUI 작업 ... 291
      9.4 데이터 공유 모델 ... 298
      9.5 다른 형태의 단일 스레드 서브시스템 ... 301
3부 활동성, 성능, 테스트 ... 303
   10장 활동성을 최대로 높이기 ... 305
      10.1 데드락 ... 305
      10.2 데드락 방지 및 원인 추적 ... 319
      10.3 그 밖의 활동성 문제점 ... 323
   11장 성능, 확장성 ... 327
      11.1 성능에 대해 ... 327
      11.2 암달의 법칙 ... 333
      11.3 스레드와 비용 ... 339
      11.4 락 경쟁 줄이기 ... 343
      11.5 예제: Map 객체의 성능 분석 ... 357
   12장 병렬 프로그램 테스트 ... 363
      12.1 정확성 테스트 ... 365
      12.2 성능 테스트 ... 382
      12.3 성능 측정의 함정 피하기 ... 390
      12.4 보조적인 테스트 방법 ... 396
4부 고급 주제 ... 403
   13장 명시적인 락 ... 405
      13.1 Lock과 ReentrantLock ... 405
      13.2 성능에 대한 고려 사항 ... 412
      13.3 공정성 ... 413
      13.4 synchronized 또는 ReentrantLock 선택 ... 416
      13.5 읽기-쓰기 락 ... 417
   14장 동기화 클래스 구현 ... 423
      14.1 상태 종속성 관리 ... 423
      14.2 조건 큐 활용 ... 433
      14.3 명시적인 조건 객체 ... 444
      14.4 동기화 클래스의 내부 구조 ... 447
      14.5 AbstractQueuedSynchronizer ... 450
      14.6 java.util.concurrent 패키지의 동기화 클래스에서 AQS 활용 모습 ... 455
   15장 단일 연산 변수와 넌블로킹 동기화 ... 461
      15.1 락의 단점 ... 462
      15.2 병렬 연산을 위한 하드웨어적인 지원 ... 464
      15.3 단일 연산 변수 클래스 ... 469
      15.4 넌블로킹 알고리즘 ... 476
   16장 자바 메모리 모델 ... 487
      16.1 자바 메모리 모델은 무엇이며, 왜 사용해야 하는가? ... 487
      16.2 안전한 공개 ... 497
      16.3 초기화 안전성 ... 504
부록 A 병렬 프로그램을 위한 어노테이션 ... 507
   A.1 클래스 어노테이션 ... 507
   A.2 필드와 메소드 어노테이션 ... 508
참고자료 ... 509
용어 정리 ... 512
찾아보기 ... 515
닫기