Java中的Thread.interrupt():重点是什么?

Ven*_*tta 7 java concurrency multithreading interrupt

我完全理解它的作用(至少我希望如此).它并没有真正中断线程.它成功了Thread.isInterrupted(),代码应该检查什么方法并停止线程本身.

我的问题是,为什么我们甚至需要这种方法?它似乎完全可以通过声明一个布尔标志来说明是否应该停止此线程?没有任何Java教科书使用此布尔标志作为如何使用volatile关键字的最佳示例吗?

我特别困惑,因为似乎没有办法"不中断"线程,因为Thread.resume()已弃用.这interrupt()比我自己写的布尔标志更有用.

除了可能更容易编写之外,Thread.interrupt()还有什么不同于我的布尔标志?

Jun*_*san 7

来自相关帖子:

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

来自javadocs

许多抛出InterruptedException的方法(例如sleep)被设计为取消当前操作并在收到中断时立即返回.

按照惯例,任何通过抛出InterruptedException退出的方法都会在执行此操作时清除中断状态.但是,通过另一个调用中断的线程,总是可以立即再次设置中断状态.

因此它提供了更多功能,而不是简单地设置布尔标志.