Streams 중급

제한 없는 경량 동시성을 위해 가상 스레드 실행자를 사용합니다.

✕ 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 21 LTS (2023년 9월) 이후 널리 사용 가능

가상 스레드 실행자는 각 작업에 대해 새 가상 스레드를 만듭니다. 고정 풀을 완전히 포화하는 I/O 집약적 작업에 이상적입니다.

공유 𝕏 🦋 in