[java] 스레드 풀의 종류

스레드 풀은 다중 스레드 환경에서 작업을 처리하는데 사용되는 스레드들의 집합입니다. 스레드 풀은 스레드 생성 및 제거에 들어가는 비용을 줄이고, 작업 처리 시간을 최적화하여 성능을 향상시키는데 도움을 줍니다. 자바에서는 java.util.concurrent 패키지에서 스레드 풀을 구현하는 다양한 클래스를 제공합니다. 여기서는 몇 가지 주요한 스레드 풀의 종류에 대해 알아보겠습니다.

1. ThreadPoolExecutor

ThreadPoolExecutor는 자바에서 가장 일반적으로 사용되는 스레드 풀 구현체입니다. 이 클래스는 주어진 작업을 처리하기 위해 설정된 스레드 풀 크기와 작업 큐를 기반으로 스레드들을 관리합니다. 다양한 생성자와 설정 옵션을 통해 스레드 풀의 동작을 조정할 수 있습니다.

ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit unit,
                    BlockingQueue<Runnable> workQueue);

corePoolSize는 최소한으로 유지되어야 하는 스레드의 개수를 의미하며, maximumPoolSize는 최대 스레드 개수를 의미합니다. keepAliveTime은 idle 상태의 스레드가 유지되는 시간을 나타내며, workQueue는 작업을 저장하는 큐를 지정합니다.

2. ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor는 주어진 일정에 따라 작업을 실행하는 스레드 풀입니다. 주어진 일정에 따라 작업을 반복하거나, 지연하여 실행할 수 있습니다.

ScheduledThreadPoolExecutor scheduledExecutor = new ScheduledThreadPoolExecutor(corePoolSize);

3. ForkJoinPool

ForkJoinPool은 병렬 프로그래밍을 위한 스레드 풀로, 작업을 작은 단위로 분할하여 병렬로 실행합니다. 주로 CPU-bound 작업에 사용됩니다.

ForkJoinPool forkJoinPool = new ForkJoinPool();

4. CachedThreadPool

CachedThreadPool은 요청이 들어오면 유동적으로 스레드를 생성하는 스레드 풀입니다. 필요에 따라 추가로 스레드를 생성하고, 유휴 시간이 지난 스레드는 종료됩니다.

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

5. WorkStealingPool

WorkStealingPoolForkJoinPool에서 파생된 스레드 풀로, work stealing 알고리즘을 사용하여 작업을 분산하고 병렬로 실행합니다.

ExecutorService workStealingPool = Executors.newWorkStealingPool();

위에 언급된 스레드 풀들은 자바에서 제공하는 몇 가지 스레드 풀 구현체 중 일부일 뿐이며, 각각 다양한 사용 사례와 설정 옵션을 가지고 있습니다. 애플리케이션에 적합한 스레드 풀을 선택하여 작업 처리 성능을 최적화할 수 있습니다.

참고 문서: