每当我调用 shutdownNow()
或 shutdown()
它都不会关闭。我读到一些线程,其中说不能保证关闭 - 有人可以为我提供一个好的方法吗?
原文由 rosesr 发布,翻译遵循 CC BY-SA 4.0 许可协议
每当我调用 shutdownNow()
或 shutdown()
它都不会关闭。我读到一些线程,其中说不能保证关闭 - 有人可以为我提供一个好的方法吗?
原文由 rosesr 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
典型的模式是:
调用
shutdownNow
时,执行程序将(通常)尝试中断它管理的线程。为了优雅的关闭,你需要在线程中捕获中断的异常或者检查中断的状态。如果你不这样做,你的线程将永远运行,你的执行者将永远无法关闭。这是因为 Java 中线程的中断是一个协作过程(即被 中断 的代码必须在被要求停止时做某事,而不是 中断 代码)。例如,以下代码打印
Exiting normally...
。但是,如果您注释掉if (Thread.currentThread().isInterrupted()) break;
行,它将打印Still waiting...
因为执行程序中的线程仍在运行。或者,它可以用
InterruptedException
编写,如下所示: