Java/Java이론
쓰레드 풀(Thread Pool)
P_eli
2023. 11. 21. 17:27
728x90
반응형
자바에서는 쓰레드 풀(Thread Pool)을 사용하여 병렬 처리를 효율적으로 관리할 수 있습니다. 쓰레드 풀은 애플리케이션의 성능을 향상시키고 리소스를 효율적으로 활용하는 데 도움이 됩니다.
쓰레드 풀이란?
쓰레드 풀은 쓰레드의 생성, 관리, 실행을 담당하는 자바의 실행자 프레임워크의 일부입니다. 일반적으로 애플리케이션에서 각각의 작업마다 쓰레드를 생성하는 것은 오버헤드가 크며, 리소스를 비효율적으로 사용할 수 있습니다. 쓰레드 풀은 이러한 문제를 해결하기 위해 미리 일정량의 쓰레드를 생성하고 작업 큐에 대기시켜두었다가 필요할 때마다 쓰레드를 할당하여 작업을 수행합니다.
쓰레드 풀의 장점
- 자원 효율성: 쓰레드 풀은 미리 생성된 쓰레드를 재사용함으로써 자원을 효율적으로 활용합니다.
- 작업 대기열: 작업 큐를 통해 대기 중인 작업을 효과적으로 관리하여 작업 간의 경합을 방지합니다.
- 쓰레드 수 조절: 쓰레드 풀은 쓰레드의 최대 및 최소 개수를 설정하여 애플리케이션의 요구에 맞게 동적으로 쓰레드를 생성하거나 해제할 수 있습니다.
자바에서의 쓰레드 풀 사용 예제
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
반응형