interrupt():中断此线程,但实际上只是给线程设置一个中断标志,线程仍会继续运行
interrupted():测试当前线程是否被中断,清除中断状态
isInterrupted(): 测试此线程是否被中断,不清楚中断状态
总结:
interrupt()是给线程设置中断标志;
interrupted()是检测中断并清除中断状态;
isInterrupted()只检测中断。
还有interrupted()作用于当前线程,
interrupt()和isInterrupted()作用于此线程,即代码中调用此方法的实例所代表的线程
实现调用interrupt()方法真正的终止线程:在线程的run方法中做处理即可,比如直接跳出run()方法使线程结束,视具体情况而定
public MyThread extends Thread{
@Override
public void run(){
for(int i=0;i<1000;i++){
System.out.println("i= "+(i+1));
if(this.isInterrupted()){
System.out.println(“通过this.isInterrupted()检测到中断”);
System.out.println("第一个interrupted() "+this.interrupted());
System.out.println("第一个interrupted() "+this.interrupted());
break;
}
}
System.out.println(“因为检测到中断,所以跳出循环,线程到这里结束,因为后面没有内容了”);
}
};
public class Run{
public static void main(String[] args){
MyThread t = new MyThread();
t.start();
t.interrupt();
//sleep等待一秒,等myThread运行完
Thread.currentThread().sleep(1000);
System.out.println("MyThread线程是否还存活? "+t.isAlive());
}
};
本文深入探讨Java中线程的中断机制,包括interrupt(), interrupted()和isInterrupted()方法的区别与应用。通过实例演示如何在run方法中响应中断请求,以优雅地结束线程执行。

1368

被折叠的 条评论
为什么被折叠?



