interrupt能关闭一个线程吗?

线程的生命周期管理API中,没有抢占式的关闭方式。早期,jdk有stop方法可以直接中断线程的运行。但是这种方式,对程序来说并不友好。哪里不友好呢?oralce的官网上,给了详细的说明
为什么stop方法过时了?
简单翻译一下:其实,最主要的原因就是:一旦对某一个线程执行了stop方法,该线程会释放其持有的所有的锁。一旦锁被释放,被这些锁保护的对象,就会对其它线程可见,并可以对该对象进行并发操作,进而会引发线程安全问题。
java没有提供抢占式关闭,但是提供了协作式的方法。把处理中断的权利交给了程序员,更人性化。
thread.interrupt。
该方法执行后,产生的影响有几种情况:
1).线程正在运行,线程中有响应中断的方法
比如:Thread.sleep和Object.wait以及阻塞队列的put,take等方法,都会响应中断(抛出InterruptedException的方法)
此时,执行了interrupt方法后,阻塞方法会检测到中断信号,并抛出InterruptedException。并且清除中断的状态。对于这种情况来说,我们一定不能只是捕捉异常,一定要处理这个异常。
将异常抛给调用者。
或者恢复中断的标志,Thread.currentThread.interrupt()。让上层代码知道该线程发生了中断。
2).线程正在运行,线程中没有响应中断的方法
此时,中断线程。线程自己知道已经被中断了,但是由于没有响应中断的方法。所以此时,线程会带着这个标识运行,继续执行剩余的代码,没有什么影响。此时,我们可以通过线程的isInterrupted方法检测到线程被中断。进而进行线程的退出或者其他操作
总结一句话就是:
线程的中断操作,不会直接关闭一个线程,只是发出了关闭的请求。目标线程收到中断请求后。具体怎样处理这个中断,由目标线程自己处理。所以,每一个线程需要有自己的中断策略

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值