가상 스레드 실행자
제한 없는 경량 동시성을 위해 가상 스레드 실행자를 사용합니다.
코드 비교
✕ Java 8
ExecutorService exec =
Executors.newFixedThreadPool(10);
try {
futures = tasks.stream()
.map(t -> exec.submit(t))
.toList();
} finally {
exec.shutdown();
}
✓ Java 21+
try (var exec = Executors
.newVirtualThreadPerTaskExecutor()) {
var futures = tasks.stream()
.map(exec::submit)
.toList();
}
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
크기 조정 없음
풀 크기를 조정할 필요 없음 — 필요한 만큼 스레드를 만듭니다.
경량
가상 스레드는 MB가 아닌 KB의 메모리를 사용합니다.
자동 닫기
try-with-resources가 자동으로 종료를 처리합니다.
이전 방식
고정 스레드 풀
모던 방식
가상 스레드 실행자
JDK 버전
21
난이도
중급
JDK 지원
가상 스레드 실행자
사용 가능
JDK 21 LTS (2023년 9월) 이후 널리 사용 가능
동작 원리
가상 스레드 실행자는 각 작업에 대해 새 가상 스레드를 만듭니다. 고정 풀을 완전히 포화하는 I/O 집약적 작업에 이상적입니다.
관련 문서