中断状态

每一个线程都有一个boolean属性,表示中断状态,初始值为false。

中断线程:Thread.interrupt()

正常情况下,只是将线程的中断状态变为true。线程中可以通过轮询中断状态,做出相应的处理。
如果线程在阻塞状态下,线程将退出阻塞且中断状态将被清除(即为false),且会抛出InterruptException。
(IO操作忽略)

查询中断状态

(1)isInterrupted(),返回当前的中断状态,不会改变中断状态。
(2)static interrupted(),返回当前中断状态,且会清除中断状态。(即第二次调用将返回 false)

处理InterruptedException

(1)继续抛出。
如果抛出InterruptedException意味着是一个阻塞方法,那么调用一个阻塞方法则意味着调用者也是一个阻塞方法,应该有某种策略来处理InterruptedException。
(2)捕获InterruptedException,执行清理,再重新抛出InterruptedException。
(3)再次调用interrupt()。
当由Runnable定义的任务调用一个可中断的方法时,在这种情况下,不能重新抛出InterruptedException,因为Runnable接口的run方法不允许抛出异常。
当一个阻塞方法检测到中断并抛出InterruptedException但是不能重新抛出它,那么应该保留中断发生的证据,以便调用栈中更高层的代码能知道中断,并对中断做出响应,该任务可以通过调用interrupt()以重新中断当前线程来完成。

public void run() {try {while (true) {Task task = queue.take(10, TimeUnit.SECONDS);task.execute();}}catch (InterruptedException e) {// Restore the interrupted statusThread.currentThread().interrupt();}}

中断一个不支持中断的类

如一个IO类会阻塞线程,但不支持中断。则可以写一个新IO类,继承Thread类,重写interrupt方法,在interrupt中关闭IO,最后调用super.interrupt();

待决中断

在进入阻塞前被中断,被称为待决中断。
在调用阻塞方法时,会立刻抛出InterruptException。

参考文章:多线程-interrupt(),isInterrupted(),interrupted() - 小路不懂2

Java的Interrupt与线程中断相关推荐

  1. java io中断_Java的Interrupt与线程中断

    中断状态 每一个线程都有一个boolean属性,表示中断状态,初始值为false. 中断线程:Thread.interrupt() 正常情况下,只是将线程的中断状态变为true.线程中可以通过轮询中断 ...

  2. java 中断线程 wait_Java 线程中断(interrupt)与阻塞 (park)的区别

    很多Java开发人员(包括我),尤其是刚进入软件行业的新手,认为Java设置线程中断就是表示线程停止了,不往前执行了, Thread.currentThread().interrupt() 其实不是这 ...

  3. java 线程退出cmd_java 线程的终止与线程中断

    关于线程终止: 1.一般来讲线程在执行完毕后就会进入死亡状态,那该线程自然就终止了. 2.一些服务端的程序,可能在业务上需要,常驻系统.它本身是一个无穷的循环,用于提供服务.那对于这种线程我们该如何结 ...

  4. java 线程池 中断_如何中断(interrupt)线程(thread)(线程池的线程中断我的理解是一个意思)...

    1.概述基本实现是,通过 InterruptedException 异常来终止程序,至于线程什么时候终止,只能由jvm来决定了,若理解的不到位,欢迎大牛们指点 2.code 如下 package co ...

  5. java 线程中断(转)

    程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.       在本篇文章中,我们针对这些难题之一:如何中断一个正在运 ...

  6. java吵醒线程_一文搞懂 Java 线程中断

    在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分 ...

  7. Java多线程系列--“基础篇”09之 interrupt()和线程终止方式

    概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括: 1. interrupt()说明 2. 终止线程的方式   2.1 终止处于"阻塞状态"的线 ...

  8. Java中如何实现线程的超时中断

    转载自  Java中如何实现线程的超时中断 背景 之前在实现熔断降级组件的时候,需要实现接口请求的超时中断.意思是,业务在使用熔断降级功能时,在平台上设置了一个超时时间,如果请求进入熔断器开始计时,接 ...

  9. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第11期)
  2. Java项目:资源下载工具(java+swing)
  3. tensorflow2.0降级及如何从别的版本升到2.0
  4. ai的弹窗点了都不响应_【评价集合】拼多多评价,你所不知道的点都在这里!...
  5. 关于table和td的边框设置
  6. Javascript中{}+[]===0为true,而[]+{}===0为false
  7. 启动Kafka失败Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 107
  8. java开机自启动 Linux,java项目jar包开机自启(WINDOWS,Linux)
  9. python gil原理_Python GIL深入浅出
  10. Python的迭代器
  11. 我的世界1.14java原版命令_我的世界:老一辈mc是怎么生存的?鱼骨式挖矿,这些套路你知道吗...
  12. WPF XMAL获取元素的父元素,子元素
  13. pythontab_PythonTab 中文网简介
  14. Unity 安装个人免费版步骤详解
  15. OpenSIPS实战(一):OpenSIPS使用简介
  16. 5款常用的数据可视化工具推荐!
  17. Android 实现一键加QQ群,一键加QQ好友
  18. win10下载日文输入法时,无法使用日文键盘的问题解决
  19. ubuntu下搭建不同端口网站
  20. 华为 CISCO 交换机型号识别

热门文章

  1. lol手游账号被移至美洲服务器,LOL手游“行窃预兆”遭玩家嫌弃,移除偷钱后成最鸡肋符文?...
  2. keepalive+lvs负载均衡及高可用总结
  3. VB得到指定文件夹下的文件列表
  4. 心情随笔(三):注入新的血液
  5. 谷歌开源缩放模型EfficientNets:ImageNet准确率创纪录,效率提高10倍
  6. 现在,TensorRT 4开放下载了
  7. AI戒毒?没错,北京开始这么干了
  8. 终于承认!马斯克证实特斯拉在造AI芯片,而且是世上最好的AI硬件
  9. 论文自动转代码!IBM印度大三实习生搞了个神奇研究(已中AAAI)
  10. 谁是真凶?《CSI:犯罪现场调查》正帮助AI提高断案能力