java 线程 是否运行_Java判断线程是否是停止状态的两种方法

本文解析了Java中Tread类的interrupted()和isInterrupted()方法,探讨了它们的区别,包括interrupt()的中断设置和isInterrupted()的查询行为,以及如何在主线程中实现子线程的中断效果。
摘要由CSDN通过智能技术生成

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!");

}

}控制台打印的结果:

0818b9ca8b590ca3270a3433284dd417.png

从控制台中可以看出,线程并未停止,因为此时的当前线程指的是"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!");

}

}

控制台结果显示:

0818b9ca8b590ca3270a3433284dd417.png

interrupt()是用来设置中断状态的。返回true说明中断状态被设置了而不是被清除了。

那为什么第二个boolean值是false呢?原因是interrupted()方法具有清除功能,所以第二次调用的时候返回的是false。

2)isInterrupted()方法:

isInterrupted()方法是一个非静态的返回值为boolean的方法。isInterrupted 是作用于调用该方法的线程对象所对应的线程。(线程对象对应的线程不一定是当前运行的线程。例如我们可以在当前线程中去调用另一个线程对象的isInterrupted方法。)

Thread.currentThread().interrupt(); 这个方法用于清除中断的状态,这样下次调用Thread.interrupted()方法时就会一直返回为true,因为中断标志已经被恢复了。而调用isInterrupted 只是简单的查询中断状态,不会对状态进行修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值