ben*_*enz 2 java multithreading interrupt
我正在阅读Oracle 文档中的中断。我无法弄清楚以下部分。它指出
如果线程长时间不调用抛出 InterruptedException 的方法怎么办?然后它必须定期调用 Thread.interrupted,如果收到中断则返回 true。例如:
for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}
}
Run Code Online (Sandbox Code Playgroud)
我绞尽脑汁地想理解,如果一个线程长时间没有调用抛出 InterruptedException 的方法,这是什么意思?其次,Thread.interrupted()的用法是什么,它是一种线程可以向自身发送中断的方法?这个场景的实际用途是什么?谢谢。
这是一种保持线程可被中断的技术。
Thread.interrupted() :检查当前线程(本身)是否被其他线程中断并清除中断状态标志。所以它会问自己,当我正在执行一项巨大的任务并且没有听别人说话时,我是否被某人打断退出我正在做的事情。
想象一下如果那件事不做的话会发生什么。
假设 的一次迭代heavyCrunch()需要 1 分钟的时间。所以 n 次迭代将花费 n 分钟。
现在假设启动程序后您决定退出程序并正常终止程序。因此,您中断了正在执行繁重任务的线程。但线程不知道您已中断它,因为它没有检查中断状态。所以程序要等N分钟还没有结束才会结束,你将不得不等待很长时间。
因此,为了优雅地终止线程,它应该始终检查中断状态,以便在其他人请求中断时做出响应。
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |