线程中断比较重要的三个方法,都自Thread类:interrupt、isInterrupted、interrupted。
1.中断方法
(1)interrupt()
中断线程,给目标线程发一个中断信号,线程被打上标记。
(2)isInterrupted()
判断目标线程是否被中断,不会清除中断标记。
(3)interrupted()
判断目标线程是否被中断,会清除中断标记。
2.中断测试
(1)实例1:中断失败
为什么?因为虽然给线程发出了中断信号,但程序中并没有响应中断信号的逻辑,所以程序不会有任何反应。
(2)实例2:中断成功
示例2中有响应中断的逻辑,并且打印信息后退出。
(3)示例3:中断失败
sleep被中断,但是程序继续运行,而不是返回,这是为什么呢?
来看sleep源码:
注释说:sleep()被中断后会清除中断标记,所以循环会继续运行。。
(4)示例4:中断 成功
在sleep方法被中断,清除标记后,又手动中断当前线程,程序接受中断信号,返回退出。
3.补充yield方法和sleep方法的区别
(1)yield方法和sleep方法都能暂停当前线程,sleep可以指定具体的休眠时间,而yield则依赖CPU的时间片划分。
(2)yield和sleep在暂停的过程中,如果已经持有锁,则都不会释放资源所。
(3)yield不能被中断,而sleep则可以接受中断。