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月)以降、広く利用可能

仮想スレッドエグゼキュータは各タスクに新しい仮想スレッドを作成します。プールのサイジングは不要です — 仮想スレッドは数百万個作成できるほど軽量です。

共有 𝕏 🦋 in