java为什么是线程。当前线程。中断()与返回相结合可以停止当前正在运行的线程
好吧,我正在试图理解为什么下面的线程组合。当前线程。当我想要终止当前线程时,interrupt()和return可以正常工作
Thread.currentThread.interrupt();
return;
我写了一个小程序:
public class Interr implements Runnable {
@Override
public void run() {
for(int i= 0; i<10000;i++){
System.out.println(i);
if(i==500){
Thread.currentThread().interrupt();
return ;
}
}
}
public static void main(String args []){
Thread thread = new Thread(new Interr());
thread.run();
}
}
我知道我也可以用线。当前线程。stop()但是终止线程是一种不安全的方式。所以我尝试使用interupt()和return的组合
它是有效的,但我不理解它为什么有效
有什么解释吗
编辑:在上面的示例中,我是线程的所有者。假设,我不是线程的所有者。为什么这种组合会起作用
# 1 楼答案
无需从同一线程调用
interrupt()
中断方法将用于从其他线程中断一个线程
根据java文档
因此,它将向I/O块中的线程发送中断信号
如果一个线程有这样的实现,即使调用了这个方法,它也不会中断
# 2 楼答案
实际上,在您发布的代码中,线程停止的原因是您调用了
return
根据documentation,调用
Thread.interrupt()
只不过是在调用它的线程上设置一个标志。线程的所有者检查标志,必须找到一种方法来停止它正在做的事情# 3 楼答案
你不需要
interrupt()
。return
足够退出run()
,这将导致线程停止,因为它没有更多的工作要做