文書の過去の版を表示しています。


Why a Thread Pool?

multi-thread program에서 실행되는 thread의 수가 많아질수록 실행되는데 걸리는 시간보다 thread간에 처리를 옮기는 데 시간을 더 많이 소비하게된다.
이 문제를 해결하기 위해 ThreadPool을 사용한다. Java에는 ThreadPool이 없기 때문에 Programmer가 구현해야 한다.
다음은 ThreadPool의 간단한 예제를 소개한다. 원문기사는 reference를 참조하기 바란다.

Implementing the Thread Pool

소스는 ThreadPool.java와 WorkerThread.java, Done.java로 구성되어 있고 Test class로 TestWorkerThread.java와 TestThreadPool.java가 있다.
thread pool은 WorkerThread Object를 배열로 가지고 있다. 이 Object는 pool을 구성하는 개별 thread들이다.
task가 발생하면 WorkerThread가 task를 실행하고 종료한다. task를 담당할 thread가 부족하게 되면, thread가 이용가능할때까지 task는 미완료된 상태로 남게된다.

처음에 ThreadPool을 생성하게 되면, WorkerThread는 정지된 상태에서 task를 기다린다. ThreadPool에 WorkerThread를 할당할 때에는 ThreadPool의 assign메소드를 이용한다.

Are We Done Yet?

thread pool이 task를 완료했는지 알려면 몇가지를 체크해야 한다. 첫째는 assignment array가 비어있어야 한다. 하지만 이것은 필요조건이지 충분조건은 아니다. 비어있다고 해도 pool안에는 실행되고 있는 WorkerThread가 존재할수도 있다.
thread pool이 작업완료 되었는지 검사하는 class가 Done.java 클래스이다. 하지만 사용할 때에는 직접 접근하지 않아도 된다.
단지 task를 assign으로 할당하고 complete메소드를 부르기만 하면 된다. Done class는 두 메소드를 가지고 있다.
WorkerThread가 시작될때 불리는 workerBegin메소드와 종료될 때 불리는 workerEnd메소드가 그것이다.
다음으로 thread pool example을 살펴본다. ===== ThreadPool.java =====