728x90
반응형
안녕하세요! 😊
오늘은 Java에서 스레드 풀(Thread Pool)을 사용하는 방법에 대해 알아보겠습니다.
스레드 풀은 멀티스레드 환경에서 성능을 최적화하고 자원을 효율적으로 관리하는 데 중요한 도구입니다.
초보자도 쉽게 이해할 수 있도록 예제와 함께 설명드릴게요!
1. 스레드 풀(Thread Pool)이란?
스레드 풀은 미리 생성된 스레드 집합으로, 새로운 작업이 들어올 때마다 스레드를 생성하지 않고 재사용합니다.
이렇게 하면 스레드 생성 및 종료 비용을 줄이고, 시스템 성능을 향상시킬 수 있습니다.
스레드 풀의 장점
- 성능 향상: 스레드를 미리 생성하여 반복적인 생성 및 종료 비용을 절감합니다.
- 자원 관리: 최대 스레드 수를 제한하여 시스템 과부하를 방지합니다.
- 코드 간결화: 멀티스레드 작업을 쉽게 구현할 수 있습니다.
2. Java에서 스레드 풀 사용하기
Java는 java.util.concurrent
패키지에서 스레드 풀을 제공합니다.
대표적으로 Executors
클래스를 사용하여 다양한 스레드 풀을 생성할 수 있습니다.
스레드 풀 생성 예제
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 고정 크기의 스레드 풀 생성
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 5; i++) {
Runnable worker = new WorkerThread("Task " + i);
executor.execute(worker); // 작업 실행
}
executor.shutdown(); // 스레드 풀 종료
while (!executor.isTerminated()) {
// 모든 작업이 완료될 때까지 대기
}
System.out.println("모든 작업이 완료되었습니다!");
}
}
class WorkerThread implements Runnable {
private String message;
public WorkerThread(String message) {
this.message = message;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 시작: " + message);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 완료: " + message);
}
}
위 코드는 고정 크기의 스레드 풀을 생성하고, 여러 작업을 실행하는 예제입니다.
각 작업은 스레드 풀의 스레드에서 처리됩니다.
3. 다양한 스레드 풀 유형
Java에서 제공하는 주요 스레드 풀 유형은 다음과 같습니다:
스레드 풀 유형 | 설명 |
---|---|
newFixedThreadPool |
고정된 크기의 스레드 풀을 생성합니다. |
newCachedThreadPool |
필요에 따라 스레드를 생성하며, 사용하지 않는 스레드는 제거합니다. |
newSingleThreadExecutor |
단일 스레드로 작업을 처리합니다. |
newScheduledThreadPool |
지정된 시간 간격으로 작업을 실행합니다. |
스케줄링 예제
아래는 newScheduledThreadPool
을 사용한 스케줄링 예제입니다:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledThreadPoolExample {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
Runnable task = () -> System.out.println("작업 실행: " + System.currentTimeMillis());
// 2초 후 실행, 이후 3초마다 반복 실행
scheduler.scheduleAtFixedRate(task, 2, 3, TimeUnit.SECONDS);
}
}
위 코드는 2초 후 작업을 실행하고, 이후 3초마다 반복 실행하는 예제입니다.
4. 스레드 풀 사용 시 주의사항
- 적절한 크기 설정: 스레드 풀이 너무 작으면 작업이 지연되고, 너무 크면 자원이 낭비됩니다.
- shutdown 호출: 작업이 완료된 후
shutdown()
을 호출하여 자원을 해제해야 합니다. - 예외 처리: 작업 중 발생한 예외를 적절히 처리해야 스레드 풀이 안정적으로 동작합니다.
5. 마무리
Java의 스레드 풀은 멀티스레드 프로그래밍에서 성능과 자원 관리를 최적화하는 데 매우 유용한 도구입니다.
위 예제를 따라 실습하며 스레드 풀의 개념과 활용법을 익혀보세요! 😊
추가 질문이 있다면 댓글로 남겨주세요.
다음에도 유익한 내용을 준비하겠습니다! 🚀
728x90
반응형