Java 多线程之 interrupt(1)

Java的线程中断并不直接停止线程,而是改变其中断状态。interrupt()方法对执行一般逻辑的线程影响不大,但在wait、join、sleep时会抛出InterruptedException。中断状态在这些方法内部被检查并抛出异常,允许线程从阻塞状态恢复或停止执行。
摘要由CSDN通过智能技术生成

以前一直以为线程的"中断"就是让线程停止.
如果你也这么认为,那你对多线程编程还没有入门.

在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后
带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段.不但不是
让线程停止运行,反而是继续执行线程的手段.


对于执行一般逻辑的线程,如果调用调用它的interrupt()方法,那么对这个线程没有任何
影响,比如线程a正在执行:
    while(条件) x ++;
这样的语句,如果其它线程调用a.interrupt();那么并不会影响a对象上运行的线程,如果
在其它线程里测试a的中断状态它已经改变,但并不会停止这个线程的运行.

在一个线程对象上调用interrupt()方法,真正有影响的是wait,join,sleep方法,当然这三个
方法包括它们的重载方法.

请注意:[上面这三个方法都会抛出InterruptedException],

一个线程在调用interrupt()后,自己不会抛出InterruptedException异常,所以你看到
interrupt()并没有抛出这个异常,所以我上面说如果线程a正在执行while(条件) x ++;
你调用a.interrupt();后线程会继续正常地执行下去.

但是,如果一个线程被调用了interrupt()后,它的状态是已中断的.这个状态对于正在执行
wait,join,sleep的线程,却改变了线程的运行结果.

(1)sleep方法与interrupt方法 

    

 

假如线程A像下面这样,使用线程的sleep()方法暂停着. 

  1. T
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值