Concurrency 初級

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
難易度
初級
ExecutorServiceの自動クローズ
利用可能

JDK 19(2022年9月)以降、広く利用可能

Java 19以降、ExecutorServiceはAutoCloseableを実装しています。close()メソッドはshutdown()を呼び出し、タスクの完了を待機します。手動のtry/finallyシャットダウンパターンは不要になりました。

共有 𝕏 🦋 in