interrupt的使用
来源:互联网 发布:网络共享服务器 反应慢 编辑:程序博客网 时间:2024/05/08 03:52
interrupt方法
interrupt字面上是中断的意思,但在Java里Thread.interrupt()方法实际上通过某种方式通知线程,并不会直接中止该线程。具体做什么事情由写代码的人决定,通常我们会中止该线程。
如果线程在调用Object类的wait()、wait(long)或wait(long, int)方法,或者该类的 join() 、join(long) 、join(long, int) 、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。
如果该线程在可中断的通道(java.nio.channels.InterruptibleChannel)上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。
如果该线程在一个 Selector (java.nio.channels.Selector) 中受阻,则该线程的中断状态将被设置,它将立即从选择操作返回,并可能带有一个非零值,就好像调用了选择器的 wakeup 方法一样。
如果以前的条件都没有保存,则该线程的中断状态将被设置。
中断一个不处于活动状态的线程不需要任何作用。
检测中断
如何检测中断决定于线程所做的事情。
如果线程调用可以抛出InterruptException的方法,则捕获InterruptException,然后在catch块中处理(通常是退出run方法以中断线程)
如果调用其它方法,则可以在空闲时检查Thread.interrupted以判断是否收到中断信号,确认收到中断信号后进行处理。可以抛出一个InterruptException从而和前一种处理方法保持一致
中断状态
线程的中断机制是使用中断状态这一内部标志实现的。中断状态在调用线程的interrupt()方法时被设置(参考上面的interrupt方法说明)。
有两种方法可以取得线程的中断状态:
调用静态方法Thread.interrupted(),该方法除了返回当前线程的中断状态外,还会清除当前线程的中断状态。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。
调用指定线程的isInterrupted()方法,该方法只返回指定线程的中断状态而不影响该线程的中断状态。
有两种方法可以清除线程的中断状态:
如上所述,调用Thread.interrupted()
调用该线程的interrupt()方法引发InterruptedException的时候同时就已经清除了所在线程的中断状态,包括Object类的wait()、wait(long)或wait(long, int)方法,或者线程的 join() 、join(long) 、join(long, int) 、sleep(long) 或 sleep(long, int) 方法
- interrupt的使用
- Thread.interrupt()的使用
- Thread interrupt() 方法的使用
- 14.5 Interrupt中断的使用
- ARMulator model之Interrupt的使用
- java线程编程中 interrupt 的使用
- interrupt、isinterrupt、interrupted的理解和使用
- 中断阻塞睡眠interrupt的使用
- java多线程中的interrupt方法的使用
- Java多线程中的interrupt方法的使用
- 关于java线程的interrupt方法的使用总结
- 线程 Thread 的 Interrupt 和 isInterrupted 打断线程的使用。
- 线程的中断-----使用线程对象的interrupt()方法
- 多线程的使用——中断线程详解(Interrupt)
- 多线程的使用——中断线程详解(Interrupt)
- Java多线程之中断线程(Interrupt)的使用详解
- Java多线程中,Join和Interrupt()方法的使用
- Java线程interrupt方法使用要注意的问题
- 与窗口操作有关的API
- g++ 编译链接C++代码, 生成与使用静态库和动态库
- 鸟哥的Linux私房菜 基础学习篇读书笔记(10):Linux磁盘与文件系统管理(3)
- CSS基础2
- opencv程序十四:读取视频并播放
- interrupt的使用
- 动态规划之矩阵链相乘问题(算法导论)
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- UNP 学习笔记
- 为什么 Thread.stop和Thread.suspend等被废弃了?
- poj 3253
- 关于yum和rpm
- 生成与中文字符串相对映的拼音首字母串的函数(js)
- MATLAB 视频读取时:Unable to locate decompressor to decompress video stream 错误原因