8

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

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

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

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

4

1 回答 1

7

从相关帖子

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

来自javadocs

很多抛出InterruptedException的方法,比如sleep,都是为了取消它们当前的操作,并在收到中断时立即返回。

按照惯例,任何通过抛出 InterruptedException 退出的方法都会在这样做时清除中断状态。然而,中断状态总是有可能被另一个线程调用中断立即再次设置。

所以它提供了更多的功能,而不是简单地设置一个布尔标志。

于 2013-07-30T04:18:45.800 回答