确保正确关闭 Java ExecutorService
Java 中的执行器提供了一种管理异步任务的便捷方法。然而,关闭执行器可能会带来挑战,特别是在处理长时间运行或无响应的任务时。
问题:
考虑代码片段:
<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor(); // ... create and submit tasks exec.shutdownNow();</code>
所有任务完成后,exec.isTermminate() 仍然为 false,表明某些任务可能没有正确终止。
解决方案:
Oracle 推荐method 是 shutdownAndAwaitTermination 方法:
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { // Wait for existing tasks to terminate (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Wait for cancelled tasks to respond (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { System.err.println("Pool did not terminate"); } } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
关闭方法摘要:
通过利用适当的关闭方法,您可以确保您的 ExecutorService 正确终止,释放资源并确保彻底关闭。
以上是如何确保Java ExecutorServiceExecutors正确关闭?的详细内容。更多信息请关注PHP中文网其他相关文章!