[java] 쓰레드 풀의 다양한 활용 예제
자바에서 쓰레드를 효율적으로 관리하기 위해 쓰레드 풀(Thread Pool)을 사용할 수 있습니다. 쓰레드 풀은 미리 정해진 개수의 쓰레드를 유지하고 작업 큐에 들어오는 작업을 쓰레드가 처리하도록 합니다. 이를 통해 쓰레드의 생성과 제거에 따른 오버헤드를 줄이고, 시스템 자원을 효율적으로 활용할 수 있습니다.
1. 쓰레드 풀의 기본 사용 예제
쓰레드 풀을 기본적으로 사용하는 예제를 살펴보겠습니다.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 쓰레드 풀 생성
ExecutorService threadPool = Executors.newFixedThreadPool(5);
// 작업 제출
for (int i = 0; i < 10; i++) {
threadPool.execute(new Task(i));
}
// 쓰레드 풀 종료
threadPool.shutdown();
}
}
class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Task " + taskId + " is running.");
}
}
위 예제에서는 ExecutorService
를 사용하여 5개의 쓰레드를 유지하는 쓰레드 풀을 생성하고, 10개의 작업을 제출하여 실행하는 예제입니다.
2. 쓰레드 풀을 활용한 작업 처리 예제
쓰레드 풀을 이용하여 웹 서버에서 클라이언트 요청을 처리하는 예제를 살펴보겠습니다.
import java.io.*;
import java.net.*;
import java.util.concurrent.*;
public class WebServer {
private static final int PORT = 8080;
private static final ExecutorService threadPool = Executors.newFixedThreadPool(10);
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
threadPool.execute(() -> handleRequest(clientSocket));
}
}
private static void handleRequest(Socket clientSocket) {
// 클라이언트 요청 처리 로직
}
}
위 예제에서는 쓰레드 풀을 이용하여 웹 서버를 생성하고, 클라이언트 요청을 쓰레드 풀의 쓰레드로 처리하는 예제입니다.
결론
쓰레드 풀은 적절하게 쓰레드를 관리할 수 있는 강력한 도구입니다. 다양한 상황에서 쓰레드 풀을 활용하여 시스템의 성능을 향상시킬 수 있으며, 적합한 상황에서의 적재적소의 활용이 중요합니다.