JAVA中有两种判断线程停止的方法:
1) public static boolean interrupted(): 测试 currentThread() 是否已经中断。
2) public boolean this. isInterrupted(): 测试 this 关键字所在类的对象是否已经中断。
第一种:public static boolean interrupted(): 测试当前线程是否已经是中断状态,执行后具有清除状态标志值为 false的功能。
demo代码:
package day4;
public class Thread1 extends Thread{
@Override
public void run() {
for(int i=0;i<50000;i++) {
System.out.println("i=" + i);
}
}
public static void main(String[] args) throws Exception {
Thread1 t1 = new Thread1();
t1.start();
Thread.sleep(100);
t1.interrupt();
System.out.println("是否停止:" + t1.interrupted());
System.out.println("是否停止:" + t1.interrupted());
}
}
结果:
总结:虽然是用t1调用方法,但是当前调用线程并不是t1,而是main线程状态,所以两次都是false。这里要注意一下,由于线程调用是CPU的事,所以这里的结果,不一定都是false,可能性是四种。由于interrupted()是静态的,所以可以直接用Thread.interrupted()来调用(以便理解错误)。
第二种:public boolean this. isInterrupted():测试线程Thread对象是否已经是中断状态,不清除状态标志。
demo代码:
package day4;
public class Thread2 extends Thread{
@Override
public void run() {
for(int i=0;i<50000;i++) {
System.out.println("i=" + i);
}
}
public static void main(String[] args) throws Exception {
Thread1 t1 = new Thread1();
t1.start();
Thread.sleep(100);
t1.interrupt();
System.out.println("是否停止:" + t1.isInterrupted());
System.out.println("是否停止:" + t1.isInterrupted());
}
}
结果:
内容参考自,仅个人学习使用:
Java多线程编程核心技术(第2版),章节:1. 11. 2