你能解释一下什么吗java.lang.Thread.interrupt()
何时调用?
Thread.interrupt()
设置目标线程的中断状态/标志。然后在该目标线程中运行的代码可以轮询中断状态并适当地处理它。一些阻止的方法,例如Object.wait()
可能会立即消耗中断状态并抛出适当的异常(通常InterruptedException
)
Java 中的中断不是抢占式的。换句话说,两个线程必须合作才能正确处理中断。如果目标线程不轮询中断状态,则中断实际上会被忽略。
轮询通过以下方式进行Thread.interrupted()
返回当前线程的中断状态并清除该中断标志的方法。通常,线程可能会执行一些操作,例如抛出 InterruptedException。
编辑(来自 Thilo 评论):一些 API 方法内置了中断处理。在我的脑海中,这包括。
-
Object.wait()
, Thread.sleep()
, and Thread.join()
- Most
java.util.concurrent
结构
- Java NIO(但不是 java.io)并且它不使用
InterruptedException
,而不是使用ClosedByInterruptException
.
编辑(来自@托马斯色情 https://stackoverflow.com/users/254279/thomas-pornin的回答完全相同的问题 https://stackoverflow.com/a/2289930/1305344为了完整性)
线程中断是一种轻推线程的温和方法。它用于给线程一个退出的机会cleanly,相对于Thread.stop()
这更像是用突击步枪射击线。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)