java isInterrupted()和interrupted()

1 线程调用interrupt()后,去中断线程
2 线程调用isInterrupted()和interrupted()判断线程是否被中断,中断返回true
public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
public boolean isInterrupted() {
return isInterrupted(false);
}
private native boolean isInterrupted(boolean ClearInterrupted)
3 isInterrupted()和interrupted()区别
(1)interrupted() 是静态方法底层调用了isInterrupted(); 返回的是当前线程的中断状态
(2)isInterrupted() 非静态方法返回的是调用线程的中断状态;例如 thread1.isInterrupted()
Thread.currentThread().interrupt();
Thread.currentThread().isInterrupted() 与 Thread.interrupted() 执行的是相同的操作
想知道thread1的中断状态可调用thread1.isInterrupted(); 如果当前运行的线程正是 thread1;也可以调用Thread.interrupted();
(3) 当线程状态是中断状态时;isInterrupted()和interrupted() 均可以返回状态true;
a)interrupted()被调用后;线程的中断状态会被清除; 再次调用interrupted()和isInterrupted();会返回false;因为中断状态已经不存在了;
b)如果没有调用interrupted();而是调用isInterrupted();无论多少次都可以返回true;因为中断状态没有被清理。
4 如何中断线程
注:线程调用interrupt() 标记线程中断状态后 逻辑不会停止只是打上了一个终止的标记;
所以推荐使用以下方式中断线程,将线程sleep一段时间; 线程是中断状态时调用sleep方法时会抛出InterruptedException 异常;抛出InterruptedException异常后线程的状态不存在了;
调用isAlive()方法检测到该线程依然是存活状态;所以后面的代码逻辑依然会被执行;若在捕获异常处 return 则结束线程;
所以可以在捕获异常的代码块里可以处理逻辑;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(Thread.currentThread().getName()+"被中断 ~");
return;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值