[java] 자바 스레드 풀(Java thread pool)

소개

자바에서는 멀티스레딩을 통해 동시에 여러 작업을 처리할 수 있습니다. 그러나 스레드를 직접 생성하고 관리하는 것은 어렵고 복잡한 일일 수 있습니다. 이러한 문제를 해결하기 위해 자바에서는 스레드 풀을 제공합니다.

스레드 풀은 일련의 작업을 대기열에 넣고 필요에 따라 스레드를 생성하여 작업을 처리하는 기능을 제공합니다. 이는 스레드를 효율적으로 관리하고 시스템의 부하를 줄이는 데 도움이 됩니다.

자바 스레드 풀 사용법

자바에서는 java.util.concurrent 패키지에서 ThreadPoolExecutor 클래스를 제공합니다. 이 클래스를 사용하여 스레드 풀을 생성하고 관리할 수 있습니다.

스레드 풀 생성하기

아래 예제는 ThreadPoolExecutor를 사용하여 스레드 풀을 생성하는 방법을 보여줍니다.

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

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 스레드 풀 생성
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        
        // 작업 추가
        for (int i = 0; i < 10; i++) {
            Runnable runnable = new MyRunnable(i);
            executorService.execute(runnable);
        }
        
        // 스레드 풀 종료
        executorService.shutdown();
    }
}

class MyRunnable implements Runnable {
    private int number;
    
    public MyRunnable(int number) {
        this.number = number;
    }
    
    @Override
    public void run() {
        System.out.println("Task " + number + " is running.");
    }
}

스레드 풀 종료하기

스레드 풀을 사용한 작업이 모두 완료되면 스레드 풀을 종료해야 합니다. executorService.shutdown() 메소드를 호출하여 스레드 풀을 안전하게 종료할 수 있습니다. 이 메소드는 현재 실행 중인 작업을 완료한 후에 스레드 풀을 종료합니다.

스레드 풀 종료 대기하기

스레드 풀을 종료하기 전에 현재 실행 중인 작업이 완료되기를 기다리고 싶을 경우 executorService.awaitTermination() 메소드를 사용할 수 있습니다. 이 메소드는 모든 작업이 완료될 때까지 대기하며, 특정 시간동안 대기할 수도 있습니다.

executorService.awaitTermination(1, TimeUnit.MINUTES);

결론

자바 스레드 풀은 여러 작업을 동시에 처리하기 위해 스레드를 효율적으로 관리하는 데 도움이 됩니다. ThreadPoolExecutor 클래스를 사용하여 스레드 풀을 생성하고 작업을 추가할 수 있으며, 작업이 완료된 후 스레드 풀을 안전하게 종료할 수 있습니다.

더 자세한 내용은 공식 자바 문서를 참조하시기 바랍니다.