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