JAVA并发编程(八)之interrupt方法

一、interrupt 

1、interrrupt 含义:字面意思中断此线程,但实际上只是将调用线程的中断标志设置为true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。

分析结果可知线程thread对象的中断状态已经为true,但依旧不会影响线程的执行;isInterrupted方法:返回当前线程的中断状态

二、如何使用interrupt中断线程

1、 对于中断线程java 本身提供也一些API,Thread.stop, Thread.suspend, Thread.resume 。这些方法都是暴力中断线程,简单说就是没有经过被终止线程的许可,被强制终止,这样做会产生一些问题。例如:我的任务执行一半,被强制终止了,可实际上我希望该任务执行完了再中断。java设计者可能意思到这样的问题,就把他们废弃(个人理解)

2、线程中断在实际开发中是很有必要的,于是就想到另外一种方案,利用线程通信。例如:A线程希望B线程中断,就给B线程打一个中断标志,至于何时中断由B线程自己决定。

用代码实现该逻辑

分析结果可知当线程thread 收到main线程给他打的中断标记后,何时退出线程,是由thread线程自己决定的。

三、阻塞状态中的线程中断

如果一个线程处于了阻塞状态(如线程调用了thread.sleep、thread.join、thread.wait、1.5中的condition.await、以及可中断的通道上的 I/O 操作方法后可进入阻塞状态),则线程在检查中断标示时如果发现中断标示为true,则会在这些阻塞方法(sleep、join、wait、1.5中的condition.await及可中断的通道上的 I/O 操作方法)调用处抛出InterruptedException异常,并且在抛出异常后立即将线程的中断标示位清除,即重新设置为false。抛出异常是为了线程从阻塞状态醒过来,并在结束线程前我们可以处理中断请求。

分析结果可以看出线程中断抛出异常后,中断状态还原为false

四、interrupted方法

interrupted方法:是检测当前线程的中断状态,并将中断状态设置为false,不能将false设置为true

五、总结

1、对于中断线程,请不要使用JAVA已经抛弃的方法,应该使用interrupt(中断线程)与isInterrupted(获取中断状态)配合,按照自己的实际业务自行中断。这种中断是JVM提供的线程通信标识符,

2、我们也可以自定义线程通信标识符控制线程的运行

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值