java中判断线程是否是停止状态
来源:互联网 发布:34周胎儿发育标准数据 编辑:程序博客网 时间:2024/06/07 01:43
Thread.java类里提供了两种方法
(1)this.interrupted():测试当前线程是否已经中断。
(2)this.isInterrupted():测试线程是否已经中断。
interrupted()方法声明如下;
public static boolean interrupted()
isInterrupted()方法声明如下:
public boolean isInterrupted()
我们先来看看this.interrupted()方法的解释:测试当前线程是否已经中断,当前线程是指运行this.interrupted方法的线程。我们代码来试验一下:
class MyThread extends Thread{@Override public void run() {super.run();for(int i=0;i<50000;i++) {System.out.println("i="+(i+1));}}}public class Run {public static void main(String[] args) {try {MyThread thread=new MyThread();thread.start();Thread.sleep(1000);thread.interrupt();//停止thread对象所代表的对象System.out.println("是否停止1?="+thread.interrupted());//判断thread对象所代表的线程是否停止System.out.println("是否停止2?="+thread.interrupted());//判断thread对象所代表的线程是否停止}catch(InterruptedException e) {System.out.println("main catch");e.printStackTrace();}System.out.println("end!");}}
可以看出线程并未停止,这就证明了interrupted()的解释:测试当前线程是否已经中断。这个当前线程是main,他从未中断过。
那么再看下面的代码;
class MyThread extends Thread{@Override public void run() {super.run();for(int i=0;i<500000;i++) {System.out.println("i="+(i+1));}}}public class Run {public static void main(String[] args) {Thread.currentThread().interrupt();//停止thread对象所代表的对象System.out.println("是否停止1?="+Thread.interrupted());//判断thread对象所代表的线程是否停止System.out.println("是否停止2?="+Thread.interrupted());//判断thread对象所代表的线程是否停止System.out.println("end!");}}
输出结果为:
是否停止1?=true是否停止2?=falseend!从上述结果来看,方法interrupted()的确判断出当前线程是否是停止状态。但是为啥第二个布尔值是false?查看官方文档中对interrupted()方法的解释;
测试当前线程是否已经中断。线程的中断状态由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回false(第一次调用已清除了其中断状态后,且在第二次调用检验完中断状态前,当前线程再次中断的情况除外。)
所以interrupted方法具有清除状态的功能,所以第二次调用后返回的值为false。
下面再来介绍isInterrupted()方法。
class MyThread extends Thread{@Override public void run() {super.run();for(int i=0;i<55000;i++) {System.out.println("i="+(i+1));}}}public class Run {public static void main(String[] args) {try {MyThread thread=new MyThread();thread.start();Thread.sleep(1000);thread.interrupt();System.out.println("是否停止1?="+thread.isInterrupted());//判断thread对象所代表的线程是否停止System.out.println("是否停止2?="+thread.isInterrupted());//判断thread对象所代表的线程是否停止}catch(InterruptedException e) {System.out.println("mian catch");e.printStackTrace();}System.out.println("end!");}}
部分输出结果为;
i=54999i=55000是否停止1?=false是否停止2?=falseend!可以看出,此方法并未清除状态标志。
在最后再来看下这两个方法的解释:
(1)this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志清楚为false的功能。
(2)this.isInterrupted():测试当前线程Thread对象是否已经是中断状态,但不清除状态标志。
阅读全文
0 0
- java中判断线程是否是停止状态
- Java判断线程是否是停止状态的两种方法
- Java线程状态、线程停止、线程阻塞
- Java线程状态、线程停止、线程阻塞
- java中判断线程执行是否超时
- Java 中判断变量是否是数字
- Java中判断是否是汉字
- java中判断今年是否是闰年
- Android中判断当前线程是否是主线程
- Android中判断当前线程是否是主线程
- jQuery停止动画和判断是否处于动画状态(转)
- Android 判断程序在手机中是否是活动状态或者正在运行状态
- android判断服务是否是运行状态
- NtQuerySystemInformation判断线程是否被挂起/判断线程状态
- java 获取线程状态 判断线程是否已启动(未测试)
- java中如何停止线程
- java 判断是否是周末
- Java判断是否是闰年
- android gradle tools 3.X 中依赖,implementation 和compile区别
- java实现FTP上传和下载
- Android Toolsbar 详解
- Django
- 用c语言输出100到200之间的素数
- java中判断线程是否是停止状态
- Codeforces Round #446 (Div. 2) C Pride
- Eclipse启动加载工作空间突然闪退
- 月考核前部分问题总结
- java.io.IOException: unexpected end of stream on okhttp3.Address@33c2c47
- TensorFlow 遇到的问题(三)
- 干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解
- 作业
- VB中的集合对象简单记录