Java中的多线程:sleep, wait, join 与 interrupt()的关系

当线程执行sleep,wait,join的操作时,首先会检查当前线程的中断标志位(INT)是否为中断状态,如果是,则抛出InterruptedException,否则的话,就顺利进入各自想要的状态:睡觉,等待,阻塞调用线程

而 interrupt() 函数的作用就是将INT的状态设为True(即使当前线程处于中断状态),仅此而已,它并没有去做实际的中断线程的操作,所以,如果要使得sleep,wait,join在调用时抛出异常,必须满足以下两个简单的条件

1:interrupt()的调用必须在sleep,wait,join之前或之中(即等待或者是睡眠时期)。(肯定要在之前啦,不然人家已经执行完成了,都已经检测过标志位了,你再去设置中断标志位,人家又不会再去检查了)

2:interrupt()和sleep的调用是针对同一个线程的。即Thread1.interrupt() 与Thread1.sleep()连用;

而 interrupt()和wait,join的调用是既可以针对统一线程也可以针对不同线程的。当针对不同线程时,要满足:Thread1.interrupt() 与Thread2.sleep(), Thread.wait()连用,并且Thread2的操作应该是建立在Thread1之上的。具体原理是与线程间的阻塞有关,可参考一些教材,这里不在赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值