java线程的interrupt方法
2024-09-03 01:24:17
java现成的interrupt方法比较容易误导新手,它其实是不会中断(停止)当前的线程,只是标志一下当前线程的某个状态值(中断标志位),并且这个状态为只对阻塞方法(比如说: Thread.sleep(),Thread.wait()或者I/O等)起作用,对于非阻塞方法不起任何作用。
每个线程都会有一个中断标志位(且当作是interrupt status吧),这个状态位默认为false状态,即非中断状态。当一个线程执行一个阻塞方法的时候,阻塞方法内部会不断地检测当前线程的interrupt status状态位,如果该状态位发生了改变(interrupt status被改变,比如由false变为true,具体有true改变为false是否会引起异常,我就还没确定,知道的园友欢迎指出),则这些阻塞方法内部会抛出InterruptedException异常,同时interrupt status状态为会重置(即变成false状态),当时这里要做一些额外的处理工作,请看下面截图:摘自:(https://www.ibm.com/developerworks/cn/java/j-jtp05236.html)
中断应该如何处理?我觉得以下这位仁兄说得有道理,摘自:http://www.cnblogs.com/onlywujun/p/3565082.html
那线程的interrupt status状态位什么情况下会发生改变呢,就比如说在其他线程B调用线程A的interrupt()方法的时候,就会更改线程A的interrupt status状态位,当然应该还有情况会导致该状态位发生改变的,欢迎补充。
为什么要线程要设置该标志位呢?详情请看下面的参考链接
http://www.cnblogs.com/onlywujun/p/3565082.html
最新文章
- Html中列表标签<;ul>;的使用
- Android中surface,surfaceview,sufaceholder以及surface客户端的关系
- Ado net Source 用法
- 15、ASP.NET MVC入门到精通——MVC-路由
- Nginx+uwsgi安装配置
- SQL表关联赋值、系统表、表数据删除
- WWDC 2013 Session笔记 - UIKit Dynamics入门
- C#中的泛型 【转】
- stage划分
- scrollView滚动(通过代码)
- sudo 免密码
- VCS引起的oracle数据库异常重新启动一例
- hdu 1068
- angular 自定义filter
- a标签实现文件下载
- LightOJ1370 Bi-shoe and Phi-shoe
- 几道比较有意思的js面试题
- HDU 1031(服装打分 **)
- xutils android studio引用问题
- fortran77读写文本文档