仮想スレッドエグゼキュータ
無制限の軽量同時実行に仮想スレッドエグゼキュータを使用する。
コード比較
✕ 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月)以降、広く利用可能
仕組み
仮想スレッドエグゼキュータは各タスクに新しい仮想スレッドを作成します。プールのサイジングは不要です — 仮想スレッドは数百万個作成できるほど軽量です。
関連ドキュメント