概述
Tread类中提供了两种方法来判断线程的状态是不是停止的。
this.interrupted():测试当前线程是否已经中断。
this.isInterrupted():测试线程是否已经中断。
1)interrupted()方法:
interrupted()方法是静态的方法,方法返回值为boolean型,调用该方法的线程的状态为将被置为"中断"状态。下面用两个例子来说明它和isInterrupted()方法的区别:
我们写了个Test2.java的类,如下:
public class Test2 extends Thread {
public void run() {
super.run();
for(int i=0;i<5000;i++){
System.out.println("i="+(i+1));
}
}public class Test1 {
public static void main(String[] args) {
Thread.currentThread().interrupt();
System.out.println("线程是否停止1?="+Thread.interrupted());
System.out.println("线程是否停止2?="+Thread.interrupted());
System.out.println("end!");
}
}
}
一个Text1.java的类
public class Test1 {
public static void main(String[] args) {
try {
Test2 thread=new Test2();
thread.start();
Thread.sleep(2000);
thread.interrupt();
System.out.println("线程是否停止1?="+thread.interrupted());
System.out.println("线程是否停止2?="+thread.interrupted());
} catch (InterruptedException e) {
System.out.println("main catch");
e.printStackTrace();
}
System.out.println("end!");
}
}控制台打印的结果:
从控制台中可以看出,线程并未停止,因为此时的当前线程指的是"main",它从未中断过,因此打印两个false结果。
那么如何使main线程产生中断的效果呢?下面我们尝试一下:
public class Test1 {
public static void main(String[] args) {
Thread.currentThread().interrupt();
System.out.println("线程是否停止1?="+Thread.interrupted());
System.out.println("线程是否停止2?="+Thread.interrupted());
System.out.println("end!");
}
}控制台结果显示:
interrupt()是用来设置中断状态的。返回true说明中断状态被设置了而不是被清除了。
那为什么第二个boolean值是false呢?原因是interrupted()方法具有清除功能,所以第二次调用的时候返回的是false。
2)isInterrupted()方法:
isInterrupted()方法是一个非静态的返回值为boolean的方法。isInterrupted 是作用于调用该方法的线程对象所对应的线程。(线程对象对应的线程不一定是当前运行的线程。例如我们可以在当前线程中去调用另一个线程对象的isInterrupted方法。)
Thread.currentThread().interrupt(); 这个方法用于清除中断的状态,这样下次调用Thread.interrupted()方法时就会一直返回为true,因为中断标志已经被恢复了。而调用isInterrupted 只是简单的查询中断状态,不会对状态进行修改。
最后
以上就是坚强发箍为你收集整理的java判断符合条件时停止_Java判断线程是否是停止状态的两种方法的全部内容,希望文章能够帮你解决java判断符合条件时停止_Java判断线程是否是停止状态的两种方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复