Java判断线程是否是停止状态的两种方法

Tread类中提供了两种方法来判断线程的状态是不是停止的。

  1. this.interrupted():测试当前线程是否已经中断。
  2. 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 只是简单的查询中断状态,不会对状态进行修改。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值