Java/Java이론

쓰레드 풀(Thread Pool)

P_eli 2023. 11. 21. 17:27
728x90
반응형

자바에서는 쓰레드 풀(Thread Pool)을 사용하여 병렬 처리를 효율적으로 관리할 수 있습니다. 쓰레드 풀은 애플리케이션의 성능을 향상시키고 리소스를 효율적으로 활용하는 데 도움이 됩니다. 

쓰레드 풀이란?

쓰레드 풀은 쓰레드의 생성, 관리, 실행을 담당하는 자바의 실행자 프레임워크의 일부입니다. 일반적으로 애플리케이션에서 각각의 작업마다 쓰레드를 생성하는 것은 오버헤드가 크며, 리소스를 비효율적으로 사용할 수 있습니다. 쓰레드 풀은 이러한 문제를 해결하기 위해 미리 일정량의 쓰레드를 생성하고 작업 큐에 대기시켜두었다가 필요할 때마다 쓰레드를 할당하여 작업을 수행합니다.

 

쓰레드 풀의 장점

  1. 자원 효율성: 쓰레드 풀은 미리 생성된 쓰레드를 재사용함으로써 자원을 효율적으로 활용합니다.
  2. 작업 대기열: 작업 큐를 통해 대기 중인 작업을 효과적으로 관리하여 작업 간의 경합을 방지합니다.
  3. 쓰레드 수 조절: 쓰레드 풀은 쓰레드의 최대 및 최소 개수를 설정하여 애플리케이션의 요구에 맞게 동적으로 쓰레드를 생성하거나 해제할 수 있습니다.

자바에서의 쓰레드 풀 사용 예제

1. 쓰레드 풀 생성

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {

    public static void main(String[] args) {
        // 쓰레드 풀 생성 (크기: 5)
        ExecutorService executor = Executors.newFixedThreadPool(5);

        // 작업 제출
        for (int i = 0; i < 10; i++) {
            Runnable worker = new WorkerThread("Task " + i);
            executor.execute(worker);
        }

        // 쓰레드 풀 종료
        executor.shutdown();
        while (!executor.isTerminated()) {
            // 모든 작업이 완료될 때까지 대기
        }

        System.out.println("모든 작업 완료");
    }
}

 

2. 작업 정의

public class WorkerThread implements Runnable {

    private String taskName;

    public WorkerThread(String taskName) {
        this.taskName = taskName;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " 시작: " + taskName);
        processTask();
        System.out.println(Thread.currentThread().getName() + " 종료: " + taskName);
    }

    private void processTask() {
        // 작업 수행 로직
        try {
            Thread.sleep(2000); // 예시로 2초간 대기
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

이 예제에서는 Executors.newFixedThreadPool(5)를 사용하여 크기가 5인 쓰레드 풀을 생성하고, 10개의 작업을 제출합니다.

각 작업은 WorkerThread 클래스에서 구현된 run 메서드를 통해 정의되며, 간단한 대기 로직이 들어가 있습니다.

728x90
반응형