并发(八):无法检查的中断状态
来源:互联网 发布:种族灭绝政策 知乎 编辑:程序博客网 时间:2024/05/19 14:38
有如下的程序:
public class LockedOwnThread extends Thread { public void run () { while(true) { synchronized (this) { try { Thread.sleep(10000); } catch (InterruptedException e) { // 这里永远都输出false System.out.println("In Exception:" + this.isInterrupted()); e.printStackTrace(); } } } } public static void main(String[] args) { LockedOwnThread lt = new LockedOwnThread(); lt.start(); // 发出中断信号 lt.interrupt(); // 在这里能检查到中断状态 System.out.println(lt.isInterrupted()); }}
在上面的程序中,启动线程后立刻发出中断信号,紧接着在主线程中能迅速检查到中断状态,但是在Exception中永远都无法检查到中断状态,始终都为false。
在没有任何操作的前提下,中断状态却表现出两种截然不同的值,这是为什么呢?
原来当线程在非阻塞状态下中断时,系统为它设置中断状态,但是,只要触发了InterruptedException,那么中断状态将会被清除,所以在上面的代码中,在cath(InterruptedException e)代码块中,永远也检查不到中断状态为true。
结论
千万不要在cath(InterruptedException e)代码块里判断中断状态,因为它始终为假。
阅读全文
0 0
- 并发(八):无法检查的中断状态
- 并发编程--线程的中断
- 检查某个服务的状态
- 检查当前的网络状态
- 检查HDFS的健康状态
- 线程的中断状态 interrupt
- JAVA并发编程(四)——线程状态与中断
- Linux内核中断系列之中断的下半部(八)
- 检查当天的警告日志并发邮件
- (48)21.4.4 检查中断---Java编程思想之并发笔记
- 【转】并发场景下的中断处理
- 【Java 并发】关于中断的几个疑问
- 用DATABASEPROPERTYEX()检查恢复过程的状态
- 检查系统状态的一段shell脚本
- 如何检查外部调用程序的状态
- 检查Windows的本地连接状态方法
- 检查Windows的本地连接状态方法
- 检查网络状态的小例子
- 句子逆序的C语言解答
- lombok的简单介绍及使用
- Linux vim的应用和管理输入和输出
- Android四大组件之Service简介
- android + jni + ndk 遇到的各种错误
- 并发(八):无法检查的中断状态
- 曲面绘制Mesh
- Android入门学习笔记整理(三)
- linux进程调度与管理(三)
- POJ 1845 Sumdiv
- unique和unique_copy用法
- 数据结构之哈希表
- 深度学习之Helloworld
- HDU