JAVA · 비동기/동시성
ExecutorService 심화
스레드 풀을 관리하는 ExecutorService의 다양한 구현과 활용법입니다.
비동기/동시성중급ExecutorService스레드풀Futureshutdown
핵심 설명
스레드 풀을 관리하는 ExecutorService의 다양한 구현과 활용법입니다.
Java code
import java.util.concurrent.*;
import java.util.*;
public class ExecutorServiceAdvanced {
public static void main(String[] args) throws Exception {
// 고정 크기 스레드 풀
ExecutorService fixed = Executors.newFixedThreadPool(4);
// 캐시 스레드 풀 (필요 시 생성, 60초 유휴 시 제거)
ExecutorService cached = Executors.newCachedThreadPool();
// 단일 스레드 (순서 보장)
ExecutorService single = Executors.newSingleThreadExecutor();
// 태스크 제출
List<Future<String>> futures = new ArrayList<>();
for (int i = 0; i < 10; i++) {
final int id = i;
futures.add(fixed.submit(() -> {
Thread.sleep(100);
return "결과-" + id;
}));
}
// 결과 수집
for (Future<String> f : futures) {
System.out.println(f.get(5, TimeUnit.SECONDS));
}
// invokeAll — 모두 완료될 때까지 대기
List<Callable<String>> tasks = List.of(
() -> "A", () -> "B", () -> "C");
List<Future<String>> results = fixed.invokeAll(tasks);
// 종료 (필수!)
fixed.shutdown();
if (!fixed.awaitTermination(10, TimeUnit.SECONDS)) {
fixed.shutdownNow();
}
cached.shutdown();
single.shutdown();
}
}학습 팁
try-with-resources(Java 19+ ExecutorService가 AutoCloseable)를 사용하면 자동으로 종료됩니다.
주의할 점
ExecutorService를 shutdown()하지 않으면 JVM이 종료되지 않습니다. finally 블록에서 반드시 종료하세요.
자주 묻는 질문
ExecutorService 심화란 무엇인가요?
스레드 풀을 관리하는 ExecutorService 의 다양한 구현과 활용법입니다.
ExecutorService 심화 학습 시 주의할 점은 무엇인가요?
ExecutorService 를 shutdown() 하지 않으면 JVM이 종료되지 않습니다. finally 블록에서 반드시 종료하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.