| Java 언어를 이용하여 멀티 쓰레드와 병행처리 패턴을 배우는 입문서. 이번 개정판에서는 Java SE 5.0에 대응하는 예제 프로그램을 추가하였으며, 초판에서 독자들이 보내준 디버그와 여러 가지 정보들을 추가하였다.
이 책에서는 디자인 패턴에 대해 주로 다루고 있지만 주요 포인트마다 Java 언어에 대해서도 설명하고 있다. 때문에 읽다 보면 Java 언어에 대한 이해도 함께 깊어지게 된다. Java 언어의 멀티 쓰레드에 대한 이해가 부족한 독자에게도 많은 도움이 될 것이다.
이 책은 Java 언어를 이용하여 멀티 쓰레드와 병행처리 패턴을 배우는 입문서입니다. 이번 개정판에서는 Java SE 5.0에 대응하는 예제 프로그램을 추가하였으며, 초판에서 독자 여러분들이 보내준 디버그와 여러 가지 정보들을 추가하였습니다. 이 책에서는 디자인 패턴에 대해 주로 다루고 있지만 주요 포인트마다 Java 언어에 대해서도 설명하고 있습니다. 때문에 읽다 보면 Java 언어에 대한 이해도 함께 깊어지게 됩니다. Java 언어의 멀티 쓰레드에 대한 이해가 아직 부족한 독자에게도 많은 도움이 될 것입니다.
* 주요 내용
멀티 쓰레드가 원활하게 사용되고 있는 프로그램에서는 복수 처리를 병행할 수 있습니다. GUI 애플리케이션에서 멀티 쓰레드를 제대로 사용하면 사용자에 대한 응답성을 향상시킬 수 있으며, 서버 상의 프로그램에서 멀티 쓰레드를 제대로 사용하면 복수 클라이언트의 요청을 병행 처리할 수 있습니다.
이 책에서는 멀티 쓰레드 프로그램에 자주 사용되는 패턴을 Java 언어로 작성한 구체적인 프로그램을 소개합니다. 쓰레드의 기초지식에서부터 쓰레드의 개시와 종료, 쓰레드 간의 배타제어와 협조동작, 효과적인 사용법, 쓰레드 수의 관리, 수행 능력 개선을 위한 힌트 등을 각 장에서 배우게 됩니다. 또한 자칫 범하기 쉬운 실수나 멀티 쓰레드 프로그램을 읽는 요령에 대해서도 공부합니다.
* 특징 또는 강점
1. 멀티 쓰레드 패턴 해설
이 책의 각 장에서는 멀티 쓰레드와 병행 처리에 관한 패턴을 설명합니다. 패턴의 내용을 소개하는 것에서 그치는 것이 아니라, 그 패턴과 관련된 Java 언어의 기능에 대해서도 소개하고 있기 때문에 Java 언어에 대한 이해도 함께 높아집니다.
2. Java 언어 예제 프로그램
이 책에서 다루는 모든 패턴에 대하여 Java 언어로 작성한 구체적인 예제 프로그램을 소개하고 있습니다. 막힘없이 읽어 갈 수 있도록 대부분의 예제 프로그램은 매우 짧게 구성했습니다. 그러면서도 예제 프로그램에는 생략된 부분이 없기 때문에 실제로 컴파일하여 실행해 볼 수 있습니다.
3. 패턴명에 대한 쉬운 해설
이 책에서는 패턴의 영어이름이 가지는 의미도 쉽게 설명하고 있어 초보자도 패턴을 쉽게 이해하고 외울 수 있습니다.
4. 연습 문제
각 장 마지막에는 연습문제가 나옵니다. 그 장에서 배운 내용을 더욱 발전시키고, 실제 개발할 때 패턴을 적용하려 한다면 꼭 연습문제를 풀어보기 바랍니다. 부록 CD에 연습문제의 해답도 싣고 있습니다.
5. java.util.concurrent 패키지 소개
Java SE 5.0부터 멀티 쓰레드 프로그램에 이용하기 편리한 java.util.concurrent 패키지가 표준 라이브러리에 추가됐습니다. 이 책의 각 장에서는 java.util.concurrent 패키지의 주요 클래스의 사용법을 예제 프로그램과 함께 설명하고 있습니다.
* 챕터별 요약
Chapter 01. Single Threaded Execution _ 이 다리를 건널 수 있는 사람은 오직 한 명
멀티 쓰레드 프로그래밍의 가장 기본적인 패턴인 Single Threaded Execution 패턴을 공부합니다. 이는 어떠한 처리를 실행하는 쓰레드가 한 개뿐임을 보증하는 패턴입니다. 이 패턴을 이용함으로써 인스턴스가 부정합 상태가 되는 것을 방지할 수 있습니다. 또한 Java 언어 synchronized에 대해서도 심도 있게 공부하며, 계수 세마포어 java.util.concurrent.Semaphore의 예제 프로그램을 만들어 봅니다.
Chapter 02. Immutable _ 망가뜨리고 싶어도 망가지지 않는다
일단 인스턴스가 생성된 다음에는 그 인스턴스의 내용이 절대 바뀌지 않는 Immutable 패턴에 대해 배웁니다. 이 패턴을 사용하면 인스턴스가 부정합 상태가 되거나 하지 않기 때문에 배타제어를 할 필요가 없어지고 수행 능력을 높일 수 있습니다. Java 언어 final의 의미에 대해서도 살펴봅니다. Collections. synchronizedList 및 java.util.concurrent.CopyOnWriteArrayList 예제 프로그램도 작성합니다.
Chapter 03. Guarded Suspension_ 준비가 될 때까지 기다려 주세요
인스턴스가 기대하는 상황이 만들어지기 전까지는 쓰레드가 메소드를 실행하지 않도록 방지하는 Guarded Suspension 패턴에 대해서 공부합니다. 이 패턴도 인스턴스의 안전성을 보장하는데 쓰입니다. Java 언어의 wait 메소드와 notifyAll 메소드의 사용법을 연습하며, 블록하는 큐(Queue) java.util.concurrent.LinkedBlockingQueue 예제 프로그램도 만들어 봅니다.
Chapter 04. Balking _ 필요 없으면 관둬요
인스턴스가 기대하는 상태가 만들어지지 않으면 메소드의 실행을 중단하는 Baking 패턴에 대해 배웁니다. 이 패턴으로 불필요한 기다림이나 과도한 메소드의 실행을 막을 수 있습니다.
Chapter 05. Producer_Consumer _ 내가 만들고 당신이 사용한다
복수의 쓰레드가 협력하여 동작하는 Producer_Consumer 패턴에 대해서 배웁니다. 이 패턴을 사용하면 데이터를 만드는 쓰레드와 사용하는 쓰레드가 충돌없이 병행 동작합니다. 블록하는 큐(Queue) java.util.concurrent.ArrayBlockingQueue의 예제 프로그램도 만듭니다.
Chapter 06. Read_Write Lock _ 다 같이 읽는 것은 상관없지만 읽는 중간에 쓰면 안돼요
유연한 배타 제어를 실행하는 Read_Write Lock 패턴에 대해서 배웁니다. 이 패턴을 이용하면 데이터를 쓰는 쓰레드는 하나밖에 동작할 수 없지만, 데이터를 읽는 쓰레드는 복수 동작이 가능해집니다. 이 패턴으로 전체적인 수행 능력을 향상시킬 수 있습니다. java.util.concurrent.locks.ReentrantReadWriteLock 예제 프로그램도 만듭니다.
Chapter 07. Thread_Per_Message _ 이 일을 부탁해요
처리를 다른 쓰레드에 맡기는 Thread_Per_Message 패턴에 대해 배웁니다. 이 패턴을 사용하면 별도의 쓰레드에 작업을 맡기고, 사용자는 바로 다음 작업을 진행할 수 있습니다. 이 패턴으로 프로그램의 응답성을 향상시킬 수 있습니다. 또한 Java 언어 내부 클래스의 사용법을 공부합니다. java.util.concurrent 패키지의 Executor이나 ExecutorServeice의 예제 프로그램도 작성합니다.
Chapter 08. Worker Thread _ 일이 올 때까지 기다리고, 일이 오면 작업한다
복수의 쓰레드를 대기시키고 처리해야 할 작업을 순서대로 실행하는 Worker Thread 패턴에 대해 배웁니다. 이 패턴을 사용하면 쓰레드 생성 코스트를 줄일 수 있습니다. 또한 대기하고 있는 쓰레드의 수를 조절하여 이용하는 리소스의 양을 제어할 수 있습니다. AWT나 Swing(JFC) 쓰레드의 사용법에 대해서도 배웁니다. 쓰레드 풀을 java.util.concurrent 패키지에서 사용하는 예제 프로그램도 만듭니다.
Chapter 09. Future _ 먼저 교환권을 받으세요
다른 쓰레드에 맡겼던 작업의 결과를 동기적으로 받아들이는 Future 패턴에 대해 배웁니다. 이 패턴은 비동기적인 메소드 호출을 만들 때 도움이 됩니다. 또한 java.util.concurrent, Future, FutureTask, Callable의 예제 프로그램도 만듭니다.
Chapter 10. Two_Phase Termination _ 뒷정리를 하고 나서 자도록 해요
쓰레드를 종료시키는 Two_Phase Termination 패턴에 대해 공부합니다. 이 패턴을 사용하면 적절하게 종료 처리를 하고 나서 쓰레드를 안전하게 마칠 수 있습니다. 쓰레드의 인터럽트에 대해서도 배웁니다. java.util.concurrent 패키지 CountDownLatch, CyclicBarrier의 예제 프로그램도 만듭니다.
Chapter 11. Thread_Specific Storage _ 쓰레드마다 락커를 가진다
쓰레드별로 변수 영역을 확보하는 Thread_Specific Storage 패턴에 대해 배웁니다. 멀티 쓰레드라 하더라도 변수 영역이 완전히 분리되어 있기 때문에 배타제어의 필요성이 사라집니다. java.lang.ThreadLocal 클래스의 사용법도 배웁니다.
Chapter 12. Active Object _ 비동기 메시지를 맞이하는 능동적인 객체
자율적으로 동작하는 객체를 만드는 Active Object 패턴에 대해 배웁니다. 이 객체는 외부의 메시지를 받아들이고 그것을 자신의 쓰레드를 이용해 실행합니다. 이 패턴을 사용하면 메소드의 호출과 실행이 분리됩니다. java.util.concurrent 패키지의 클래스를 사용한 예제 프로그램도 만듭니다. |