你能解释一下java.lang.Thread.interrupt()
在被调用时做了什么吗?
最佳答案
Thread.interrupt()
设置目标线程的中断状态/标志。然后在该目标线程中运行的代码可以轮询中断状态并适本地处理它。一些阻塞的方法如Object.wait()
可能会立即消耗中断状态并抛出适当的异常(通常是InterruptedException
)
Java 中的中断不是先发制人的。换句话说,两个线程必须合作才能正确处理中断。如果目标线程没有轮询中断状态,则中断实际上被忽略。
通过 Thread.interrupted()
方法进行轮询,该方法返回当前线程的中断状态并清除该中断标志。通常线程可能会做一些事情,比如抛出 InterruptedException。
编辑(来自 Thilo 评论):一些 API 方法内置了中断处理。这包括我的头顶。
Object.wait()
、Thread.sleep()
和Thread.join()
- 大多数
java.util.concurrent
结构 - Java NIO(但不是 java.io),它不使用
InterruptedException
,而是使用ClosedByInterruptException
。
编辑(来自 @thomas-pornin 对 exactly same question 的完整回答)
线程中断是一种轻推线程的温和方式。它用于让线程有机会干净地退出,而 Thread.stop()
则更像是用突击步枪射击线程。
关于java - java.lang.Thread.interrupt() 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3590000/