[java] 쓰레드 풀의 원리와 동작 방식

쓰레드 풀은 멀티스레드 애플리케이션에서 쓰레드 생성 및 관리를 효율적으로 처리하기 위해 사용됩니다. 쓰레드 풀은 작업을 수행할 쓰레드를 미리 생성하고, 작업을 큐에 넣어두면 쓰레드 풀에서 작업을 수행할 쓰레드가 큐에서 작업을 가져와 실행하는 방식으로 동작합니다.

쓰레드 풀의 원리

쓰레드 풀은 쓰레드 생성 및 삭제 비용을 줄이고, 쓰레드를 재사용하여 성능을 향상시킵니다. 또한 쓰레드 풀은 동시에 실행되는 쓰레드의 수를 제어함으로써 시스템 자원을 효율적으로 활용할 수 있습니다.

쓰레드 풀의 동작 방식

  1. 작업을 수행할 수 있는 쓰레드를 미리 생성합니다.
  2. 작업이 들어오면 쓰레드 풀은 이를 큐에 넣습니다.
  3. 쓰레드 풀은 큐에서 작업을 가져와 할당된 쓰레드가 작업을 실행합니다.
  4. 작업이 완료되면 쓰레드는 다시 풀에 반환됩니다.

이러한 방식으로, 쓰레드 풀은 쓰레드 생성 및 삭제로 인한 오버헤드를 줄이고, 많은 작업을 효율적으로 처리할 수 있습니다.

예제 코드

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

public class ThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            Runnable worker = new WorkerThread("" + i);
            executor.execute(worker);
        }
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        System.out.println("모든 작업이 완료됨");
    }
}

class WorkerThread implements Runnable {
    private String message;
    public WorkerThread(String s) {
        this.message = s;
    }
    public void run() {
        System.out.println(Thread.currentThread().getName() + " (작업 내용): " + message);
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " 작업 완료");
    }
}

위의 예제 코드는 ExecutorService를 사용하여 쓰레드 풀을 생성하고, WorkerThread를 작업으로 실행하는 간단한 예제입니다.

쓰레드 풀은 자바에서 멀티스레드 애플리케이션의 성능 향상 및 자원 관리를 위해 중요한 개념이며, 효율적인 다중 작업 처리를 위해 널리 사용됩니다.

참고 자료