java.lang.Thread.interrupt()做什么?

你能解释一下java.lang.Thread.interrupt()在被调用时做了什么吗

Thread.interrupt()设置目标线程的中断状态/标志。然后,在该目标线程中运行的代码可以轮询中断状态并适当地处理它。某些阻塞的方法,如Object.wait()可能会立即使用中断状态并引发适当的异常(通常是InterruptedException

Java中的中断不是先发制人的。换句话说,为了正确处理中断,两个线程必须协作。如果目标线程没有轮询中断状态,中断将被有效忽略

轮询通过Thread.interrupted()方法进行,该方法返回当前线程的中断状态并清除该中断标志。通常线程可能会执行一些操作,比如抛出InterruptedException

编辑(来自Thilo注释):一些API方法内置了中断处理。在我的头顶上,这包括

  • Object.wait()Thread.sleep(),和Thread.join()
  • 大多数java.util.concurrent结构
  • JavaNIO(但不是Java.io),它不使用InterruptedException,而是使用closedbyinterrupexception

编辑(从@thomas pornin对完全相同问题的回答中获得完整性)

线程中断是轻推线程的一种温和方式。它是用来给线程一个干净地退出的机会,而不是像用突击步枪射击线程那样的Thread.stop()

发表评论