java多线程:线程中断Interrupt 及测试

线程中断比较重要的三个方法,都自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则可以接受中断。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值