代码对比
✕ 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/finally 来调用 shutdown()。
旧方式
手动关闭
现代方式
try-with-resources
自 JDK
19
难度
入门
JDK 支持
ExecutorService 自动关闭
可用
自 JDK 19 起广泛可用(2022 年 9 月)
工作原理
自 Java 19 起,ExecutorService 实现了 AutoCloseable。close() 方法会等待所有任务完成,然后关闭执行器——无需手动 shutdown() 和 awaitTermination()。
相关文档