[java] 쓰레드 풀과 멀티코어 처리

이번에는 자바에서 쓰레드 풀을 이용하여 멀티코어를 효율적으로 활용하는 방법에 대해 알아보겠습니다.

쓰레드 풀(Thread Pool)이란?

쓰레드 풀은 쓰레드 생성, 관리, 재활용을 담당하는 자바의 유틸리티입니다. 쓰레드 풀을 사용하면 쓰레드의 생성 및 소멸에 따른 오버헤드를 줄일 수 있습니다.

멀티코어 프로세서와 쓰레드

요즘 대부분의 컴퓨터는 멀티코어 프로세서를 사용하고 있습니다. 멀티코어는 여러 개의 코어를 가지고 있어 동시에 여러 작업을 처리할 수 있습니다. 쓰레드 풀은 멀티코어를 잘 활용하여 병렬 처리를 가능케 합니다.

쓰레드 풀 사용 예시

아래는 간단한 쓰레드 풀 사용 예시입니다.

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() + " (Start) message = " + message);
        processMessage();
        System.out.println(Thread.currentThread().getName() + " (End)");
    }

    private void processMessage() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

위 예시에서 ExecutorService를 이용하여 쓰레드 풀을 생성하고, 작업을 수행하는 것을 볼 수 있습니다.

결론

쓰레드 풀을 사용하면 멀티코어를 효율적으로 활용하여 프로그램의 성능을 향상시킬 수 있습니다. 멀티코어를 활용하지 않고 쓰레드를 직접 다룰 때보다 더 적은 오버헤드로 병렬 처리를 구현할 수 있습니다.

참고 문헌: Oracle 자바 문서