JAVA线程的interrupt

interrupt() 只是改变中断状态而已.  interrupt() 不会中断一个正在运行的线程。这一方法实际上完成的是,给受阻塞的线程抛出一个中断信号,
    这样受阻线程就得以退出阻塞的状态 。更确切 的说,如果线程被 Object.wait,  Thread.join Thread.sleep 三种方法之一阻塞,    那么,它将接收到一个 中断异常 InterruptedException ),从而 提早地终结被阻塞状态
    如果线程没有被阻塞,这时调用 interrupt() 将不起作用;否则,线程就将得到 InterruptedException 异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。
     线程A 在执行 sleep , wait , join 时, 线程B 调用线程A的 interrupt 方法,的确这一个时候A会有 InterruptedException  异常抛出来.
    但这其实是在
sleep,wait,join 这些方法内部会不断检查中断状态的值,而自己抛出的 InterruptedException
    如果线程A正在执行一些指定的操作时如赋值,for,while,if,调用方法等,都不会去检查中断状态
    ,所以线程A不会抛出 
InterruptedException ,而会一直执行着自己的操作.
    当线程A终于执行到
wait(),sleep(),join() 时,才马上会抛出 InterruptedException.
    若没有调用sleep(),wait(),join()这些方法,即没有在线程里自己检查中断状态自己抛出InterruptedException的 话,
    那InterruptedException是不会被抛出来的. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值