본문 바로가기

BOOK

Java 언어로 배우는 디자인 패턴 입문 - 멀티 쓰레드 편


Java 언어로 배우는 디자인 패턴 입문 - 멀티 쓰레드 편 Java言語で?ぶデザインパタ?ン入門 :
유키 히로시| 변연희| 영진닷컴| 2008.04.30 | 568p |
Java 언어로 배우는 디자인 패턴 입문 - 멀티 쓰레드 편 Java言語で?ぶデザインパタ?ン入門 :
유키 히로시| 변연희| 영진닷컴| 2008.04.30 | 568p
 
책 소개
이 책은 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의 예제 프로그램도 만듭니다.

sChapter 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 패키지의 클래스를 사용한 예제 프로그램도 만듭니다. [강컴닷컴 제공]
이 책의 통합검색 결과보기
TOP
작가 소개
저자 | 유키 히로시
유키 히로시 (YUKI HIROSHI)

C.S.루이스, 무라카미 하루키의 책과 성경 읽기를 즐기며, 바로크 음악과 산책을 좋아하는 1963년생 프로그래머

홈페이지 : www.hyuki.com

주요 저서
- C 언어 프로그래밍 엣센스
- C 언어 프로그래밍 레슨
- Java 언어프로그래밍 레슨
- Perl 언어프로그래밍 레슨
- 암호 기술 입문 : 비밀의 나라의 앨리스
- 프로그래머의 수학
- Java 언어로 배우는 리팩토링 입문
- Java 언어로 배우는 디자인 패턴 입문
- Java 언어로 배우는 디자인 패턴 입문 - 멀티 쓰레드 편
- 유키 히로시의 Wiki 입문
- 수학걸 [강컴닷컴 제공]
작가의 통합검색 결과보기
TOP
목차
Introduction 01 Java 언어의 쓰레드

Introduction 02 멀티 쓰레드 프로그램의 평가기준

Chapter 01. Single Threaded Execution - 이 다리를 건널 수 있는 사람은 오직 한 명
- Single Threaded Execution 패턴
- 예제 프로그램 1 : Single Threaded Execution 패턴을 사용하지 않는 예
- 예제 프로그램 2 : Single Threaded Execution 패턴을 사용한 예
- Single Threaded Execution 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 1 : synchronized에 대해 생각해 봅시다
- 보강 2 : java.util.concurrent 패키지와 계수 Semaphore

Chapter 02. Immutable - 망가뜨리고 싶어도 망가지지 않는다
- Immutable 패턴
- 예제 프로그램
- Immutable 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 1 : final
- 보강 2 : 컬렉션 클래스와 멀티 쓰레드

Chapter 03. Guarded Suspension- 준비가 될 때까지 기다려 주세요
- Guarded Suspension 패턴
- 예제 프로그램
- Guarded Suspension 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴

Chapter 04. Balking - 필요 없으면 관둬요
- Balking 패턴
- 예제 프로그램
- Balking 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 : 타임아웃

Chapter 05. Producer-Consumer - 내가 만들고 당신이 사용한다
- Producer-Consumer 패턴
- 예제 프로그램
- Producer Consumer 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 1 : 예외 InterruptedException
- 보강 2 : java.util.concurrent 패키지와 Producer-Consumer 패턴

Chapter 06. Read-Write Lock - 다 같이 읽는 것은 상관없지만 읽는 중간에 쓰면 안돼요
- Read-Write Lock 패턴
- 예제 프로그램
- Read-Write Lock 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 : java.util.concurrent.locks 패키지와 Read-Write Lock 패턴

Chapter 07. Thread-Per-Message - 이 일을 부탁해요
- Thread-Per-Message 패턴
- 예제 프로그램
- Thread-Per-Message 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 1 : 프로세스와 쓰레드
- 보강 2 : java.util.concurrent 패키지와 Thread-Per-Message 패턴

Chapter 08. Worker Thread - 일이 올 때까지 기다리고, 일이 오면 작업한다
- Worker Thread 패턴
- 예제 프로그램
- Worker Thread 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 1 : Swing의 이벤트·디스패칭 쓰레드
- 보강 2 java.util.concurrent 패키지와 Worker Thread 패턴

Chapter 09. Future - 먼저 교환권을 받으세요
- Future 패턴
- 예제 프로그램
- Future 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 : java.util.concurrent 패지키와 Future 패턴

Chapter 10. Two-Phase Termination - 뒷정리를 하고 나서 자도록 해요
- Two-phase Termination 패턴
- 예제 프로그램
- Two-Phase Termination 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 1 : 인터럽트 상태와 예외 InterruptedException의 상호 변환
- 보강 2 : java.util.concurrent 패키지와 쓰레드의 동기

Chapter 11. Thread-Specific Storage - 쓰레드마다 락커를 가진다
- Thread-Specific Storage 패턴
- java.lang.ThradLocal 클래스에 대하여
- 예제 프로그램1 : Thread-Specific Storage 패턴을 사용하지 않는 예
- 예제 프로그램 2 : Thread-Specific Storage 패턴을 사용하는 예
- Thread-Specific Storage 패턴의 등장인물
- 생각의 폭을 넓히는 힌트
- 관련 패턴
- 보강 : 액터 베이스와 태스크 베이스

Chapter 12. Active Object - 비동기 메시지를 맞이하는 능동적인 객체
- Active Object 패턴
- 예제 프로그램
- Active Object 패턴의 등장인물
- 생각의 폭을 넓히기 위한 힌트
- 관련 패턴
- 보강 : java.util.concurrent 패키지와 Active Object 패턴

Chapter 13. 총정리 - 멀티 쓰레드 프로그래밍 패턴 랭귀지
- 멀티 쓰레드 프로그래밍 패턴 랭귀지
- Single Thread Execution 패턴(Chapter 01)
- Immutable 패턴(Chapter 02)
- Guarded Suspension 패턴(Chapter 03)
- Balking 패턴(Chapter 04)
- Producer-Consumer 패턴(Chapter 05)
- Read-Write Lock 패턴(Chapter 06)
- Thread-Per-Message 패턴(Chapter 07)
- Worker Thread 패턴(Chapter 08)
- Future 패턴(Chapter 09)
- Two-Phase Termination 패턴(Chapter 10)
- Thread-Specific Storage 패턴(Chapter 11)
- Active Object 패턴(Chapter 12)

[인터파크 제공]