Java里一个线程调用了Thread.interrupt()到底意味着什么?
2017-06-29 20:20
387 查看
一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。
所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。
而 Thread.interrupt 的作用其实也不是中断线程,而是「通知线程应该中断了」,
具体到底中断还是继续运行,应该由被通知的线程自己处理。
具体来说,当对一个线程,调用 interrupt() 时,
① 如果线程处于被阻塞状态(例如处于sleep, wait, join 等状态),那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常。仅此而已。
② 如果线程处于正常活动状态,那么会将该线程的中断标志设置为 true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。
interrupt() 并不能真正的中断线程,需要被调用的线程自己进行配合才行。
也就是说,一个线程如果有被中断的需求,那么就可以这样做。
① 在正常运行任务时,经常检查本线程的中断标志位,如果被设置了中断标志就自行停止线程。
② 在调用阻塞方法时正确处理InterruptedException异常。(例如,catch异常后就结束线程。)
来自知乎解答
所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。
而 Thread.interrupt 的作用其实也不是中断线程,而是「通知线程应该中断了」,
具体到底中断还是继续运行,应该由被通知的线程自己处理。
具体来说,当对一个线程,调用 interrupt() 时,
① 如果线程处于被阻塞状态(例如处于sleep, wait, join 等状态),那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常。仅此而已。
② 如果线程处于正常活动状态,那么会将该线程的中断标志设置为 true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。
interrupt() 并不能真正的中断线程,需要被调用的线程自己进行配合才行。
也就是说,一个线程如果有被中断的需求,那么就可以这样做。
① 在正常运行任务时,经常检查本线程的中断标志位,如果被设置了中断标志就自行停止线程。
② 在调用阻塞方法时正确处理InterruptedException异常。(例如,catch异常后就结束线程。)
来自知乎解答
相关文章推荐
- Java多线程-Thread.interrupt()到底意味着什么
- 在JAVA中线程到底起到什么作用!
- Java中有几种方法实现一个线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不提倡使用?
- Java线程Thread之interrupt中断解析
- JavaFX对Java开发者到底意味着什么?
- java中一个子线程如何通过interrupt手段来停止另外一个子线程
- 在JAVA中线程到底起到什么作用
- Java传统多线程的实现有两种方法,继承Thread类或者实现Runnable即可.线程启动时调用start()方法.
- java基础问题---java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用
- Android Thread interrupt 中断JAVA线程(转)
- Java中一个线程执行死循环有什么后果
- Java Thread.interrupt 中断JAVA线程
- Java中的线程Thread方法之---interrupt()
- Java Thread.interrupt 害人中断JAVA线程
- What is Java thread priority? 什么是java线程优先级
- 在JAVA中线程到底起到什么作用!
- java线程--Thread.interrupt&&Thread.sleep
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
- Java中的线程Thread方法之---interrupt()
- java程序中,如何安全的结束一个正在运行的线程?interrupt()