关于第二种情况的判断interrupt
来源:5-4 遇到阻塞

你的益达91
2019-08-16
老师,第二种情况下循环结束休眠去掉判断interrupt的条件(如下代码)也可以结束,而且interrupt的时候while循环已经结束了,也不会再进行判断了,为什么要加上呢?
public static void main(String[] args) throws InterruptedException {
Runnable runnable = new Runnable() {
public void run() {
int num = 0;
try {
while (num <= 300 ) {
if (num % 100 == 0) {
System.out.println(num + "是100的倍数");
}
num++;
}
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread thread = new Thread(runnable);
thread.start();
Thread.sleep(500);
thread.interrupt();
}
写回答
2回答
-
悟空
2019-08-17
这里加上!Thread.currentThread().isInterrupted()是我们编写多线程代码时候的一个良好的习惯,可以应对不同的业务场景。
在本例中,如果判断条件是num <= 300,那么确实在interrupt的时候while循环已经结束了,不过这里的判断条件很可能会根据业务需求做出改变,例如改成num <= 30000,或者是其他的耗时操作,那么interrupt就会发生在while期间,如果不加上!Thread.currentThread().isInterrupted(),就会导致只能等while所有循环都结束后才能发现中断信号,这样的响应速度就太慢了,所以通常在每次while循环时,都应该加上检查中断信号的逻辑。
10 -
无心铁憨憨
2019-08-16
这应该算是一种好的习惯,现在所有代码与线程都是自己编写的,所以你可以很肯定的知道,在执行while的时候是不会被中断的,但如果你有调用了别人的代码的时候,你就无法确定你所调用的代码是否有设置中断,而你的逻辑是希望线程没有被中断的情况下去执行,一旦碰到中断,剩下的我就不执行了。
所以,在这段自己写的代码里,加不加上判断线程中断状态的代码,都是可以的,结果不会产生变化012019-08-17
相似问题