[java] 쓰레드 풀과 작업 큐

이번 포스트에서는 쓰레드 풀(thread pool)작업 큐(work queue)에 대해 알아보겠습니다.

쓰레드 풀

쓰레드 풀은 정해진 개수의 쓰레드를 미리 생성하여 관리하는 기법입니다. 이를 통해 쓰레드의 생성 및 소멸에 따른 오버헤드를 줄일 수 있습니다.

쓰레드 풀은 보통 ThreadPoolExecutor 클래스를 사용하여 구현됩니다. 개발자는 필요에 따라 쓰레드 풀의 최대 크기나 쓰레드의 유지 시간 등을 설정할 수 있습니다.

작업 큐

작업 큐는 쓰레드 풀에 의해 처리될 작업을 저장하는 자료구조입니다. 일반적으로 BlockingQueue 인터페이스를 구현한 클래스들이 사용됩니다. 작업이 들어오면 작업 큐에 추가되어 있던 쓰레드가 작업을 가져와 처리합니다.

쓰레드 풀과 작업 큐를 함께 사용하면 다수의 작업을 효율적으로 처리할 수 있습니다.

다음은 ThreadPoolExecutor를 사용하여 쓰레드 풀과 작업 큐를 함께 구현한 예시 코드입니다.

import java.util.concurrent.*;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 쓰레드 풀 생성
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
            2, // 코어 쓰레드 수
            4, // 최대 쓰레드 수
            10, // 쓰레드 유지 시간
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(2) // 작업 큐
        );

        // 작업 추가
        threadPool.execute(() -> System.out.println("Task 1"));
        threadPool.execute(() -> System.out.println("Task 2"));
        threadPool.execute(() -> System.out.println("Task 3"));

        // 쓰레드 풀 종료
        threadPool.shutdown();
    }
}

쓰레드 풀과 작업 큐를 이용하면 다양한 작업을 효율적으로 처리할 수 있으며, 멀티쓰레드 환경에서의 성능을 향상시킬 수 있습니다.

이상으로 쓰레드 풀(thread pool)작업 큐(work queue)에 대한 내용을 알아보았습니다.

참고 자료