ExecutorServiceの自動クローズ
try-with-resourcesを使ってエグゼキュータを自動シャットダウンする。
コード比較
✕ Java 8
ExecutorService exec =
Executors.newCachedThreadPool();
try {
exec.submit(task);
} finally {
exec.shutdown();
exec.awaitTermination(
1, TimeUnit.MINUTES);
}
✓ Java 19+
try (var exec =
Executors.newCachedThreadPool()) {
exec.submit(task);
}
// auto shutdown + await on close
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
自動クリーンアップ
ブロックを抜けると自動的にシャットダウンされます。
リークなし
例外が発生してもエグゼキュータは常にシャットダウンされます。
使い慣れたパターン
ファイルや接続などで使われるtry-with-resourcesと同じです。
旧来のアプローチ
手動シャットダウン
モダンなアプローチ
try-with-resources
JDKバージョン
19
難易度
初級
JDKサポート
ExecutorServiceの自動クローズ
利用可能
JDK 19(2022年9月)以降、広く利用可能
仕組み
Java 19以降、ExecutorServiceはAutoCloseableを実装しています。close()メソッドはshutdown()を呼び出し、タスクの完了を待機します。手動のtry/finallyシャットダウンパターンは不要になりました。
関連ドキュメント