추천의 글 ... 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