中断状态

每一个线程都有一个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 status

Thread.currentThread().interrupt();

}

}

中断一个不支持中断的类

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

待决中断

在进入阻塞前被中断,被称为待决中断。

在调用阻塞方法时,会立刻抛出InterruptException。

java io中断_Java的Interrupt与线程中断相关推荐

  1. 【Java并发编程】之二:线程中断

    [Java并发编程]之二:线程中断 使用interrupt()中断线程 ​ 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一 ...

  2. Java的Interrupt与线程中断

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

  3. Java多线程(九)—— interrupt()和线程终止方式

    一.interrupt() 说明 interrupt()的作用是中断本线程. 本线程中断自己是被允许的:其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限.这有 ...

  4. Java并发编程(2):线程中断(含代码)

    使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回.这 ...

  5. java io操作_Java IO 操作

    IO操作 Java对数据的操作都是通过流的方式,IO流用来处理设备之间的数据传输,文件上传和文件下载,Java用于操作流的对象都在IO包,NIO(New IO)包中. 创建文件 Java创建文件的方式 ...

  6. java io系统_java中的io系统详解

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...

  7. java.io.file()_Java IO(一):IO和File

    一.IO 大多数的应用程序都要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.IO就是指应用程序对这些设备的数据输入与输出,Java语言定义了许多类专门负责各种方式的输入.输出,这些类都被放在 ...

  8. java io 输出流_Java IO 输入和输出流

    数据流是指一组有顺序的,有起点和终点的字节集合. 最初的版本中,java.io 包中的流只有普通的字节流,即以 byte 为基本处理单位的流.字节流用来读写 8 位的数据,由于不会对数据做任何转换,因 ...

  9. java io 结构_java 的IO类库的基本架构

    java IO 操作的类在java.io 包中,大概可以分为以下几组: 基于字节操作的接口:InputStream 和 OutputStream 基于字符操作的接口:Writer 和 Reader 基 ...

最新文章

  1. 南通市公积金信息系统goldengate复制软件采购
  2. Linux服务器安装python3.6.1 运行爬虫
  3. 【机器视觉】 set_fuzzy_measure_norm_pair算子
  4. 计算机技术与自动化期刊官网,计算技术与自动化是什么级别
  5. 数据结构和算法——栈、队列、堆
  6. 扩展Python模块系列(二)----一个简单的例子
  7. 标题排版字幕动画fcpx模板:Typography Titles for Mac
  8. Lync2013 升级错误总结2 Lync2013 PC和手机客户端登录无法验证
  9. linux 间隔时间中断测试
  10. 最小生成树 POJ - 3522(枚举边最小生成树)
  11. GoodUserInterface 模仿页面功能
  12. Systemd基础篇:systemd vs SysVinit
  13. 打击感在动作游戏中如何实现?【战斗篇】
  14. Riverbed:SDN向广域网扩展为企业带来哪些价值
  15. 路径导航与启发式搜索
  16. SpringBoot 开发案例之各种参数传递,以及前端代码和postman测试(完整版)
  17. 阿里云物联网平台测试知识点梳理
  18. 计算机硬件系统的五大基本组成部分分别是,计算机的硬件系统由几大部分构成,分别包括哪些硬件,基本功能是什么?...
  19. [MATLAB]从键盘输入一个带有字母构成的字符串,要求大写变小写,小写变大写输出。
  20. 加速度计和陀螺仪原理

热门文章

  1. 轻量级插件ResourceChecker
  2. ftp 上传 工具,三款特别好用的ftp 上传 工具
  3. 基于RSA的t-out-of-n OT协议
  4. 获取A2B控制数据方法
  5. 示波器和万用表测量直流电压的区别
  6. 使用C语言分析分析英文字符串中的单词
  7. 古典密码-凯撒加密和解密
  8. 2018岗位招聘信息、薪资待遇详细分析——数据分析
  9. 2021-12-5 学习的打卡学习第十三天(一些习题)
  10. VMware12卸载之后安装其他版本导致回滚操作的解决方法之一