JAVA/멀티스레딩

Thread Pooling

최-코드 2024. 8. 28. 16:07

Thread Pooling

  • 매번 처음부터 다시 스레드를 생성하지 않고, 미리 스레드를 생성한 다음 재사용하는 방식을 말한다.
  • 따라서 기존보다 낮은 오버헤드를 발생하게 된다.
  • 작업들은 대기열에 저장되며, 모든 스레드가 동작 중일 때는 대기열에서 대기한다.

Executor.newFixedThreadPool

  • 스레드 풀에 있는 스레드는 고정된 개수를 가지게 된다.
  • 빌트인 대기열이 딸려 있다.
import java.util.concurrent.*;

public class Example {
    private static final int NUMBER_OF_THREADS = 1;

    public static void main(String[] args) throws InterruptedException {
        ExecutorService executor = Executors.newFixedThreadPool(NUMBER_OF_THREADS);
        CountDownLatch countDownLatch = new CountDownLatch(1); // 대기할 스레드 개수
		//submit 함수를 통해 스레드에서 작업 실행
        executor.submit(() -> {
            try {
                System.out.println("Hello");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                countDownLatch.countDown();
            }
        });

        countDownLatch.await(); // 모든 작업이 완료될 때까지 대기, 즉 countDownLatch의 값이 0이 될 때
        executor.shutdown(); // 스레드 풀 종료
    }
}