如何使interrupt()工作?

时间:2014-03-22 21:00:39

标签: java multithreading

你能看一下这幅画吗?现在在A步之前我执行了this.interrupt()。您可以看到this.isInterrupted()为false。我正在仔细检查 - "这个"没有改变。它有相同的ID(12)。那么,为什么没有interrupt()方法的结果呢?

enter image description here

稍后添加。代码为文本:

@Override
protected void letUsFinalise() {
    this.interrupt();
}

2 个答案:

答案 0 :(得分:2)

interrupted()的javadoc说:

  

测试当前线程是否已被中断。 此方法清除线程的中断状态。换句话说,如果连续两次调用此方法,则第二次调用将返回false

(强调我的)

BTW,interrupted()是一种静态方法。它应该在Thread类上调用,而不是在this中调用。鉴于它有副作用,你应该在调试器中为它创建一个手表。请改为观看isInterruped()

答案 1 :(得分:0)

请注意,interrupt()可能不会立即停止执行该线程。 调试多线程程序可能不是那么简单,因为执行可能完全不同。因此,我建议您执行以下操作:

while(!Thread.foo.isInterrupted()){
   //wait or  do something
   }