java io中断_Java的Interrupt与线程中断
中断状态
每一个线程都有一个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与线程中断相关推荐
- 【Java并发编程】之二:线程中断
[Java并发编程]之二:线程中断 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一 ...
- Java的Interrupt与线程中断
中断状态 每一个线程都有一个boolean属性,表示中断状态,初始值为false. 中断线程:Thread.interrupt() 正常情况下,只是将线程的中断状态变为true.线程中可以通过轮询中断 ...
- Java多线程(九)—— interrupt()和线程终止方式
一.interrupt() 说明 interrupt()的作用是中断本线程. 本线程中断自己是被允许的:其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限.这有 ...
- Java并发编程(2):线程中断(含代码)
使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回.这 ...
- java io操作_Java IO 操作
IO操作 Java对数据的操作都是通过流的方式,IO流用来处理设备之间的数据传输,文件上传和文件下载,Java用于操作流的对象都在IO包,NIO(New IO)包中. 创建文件 Java创建文件的方式 ...
- java io系统_java中的io系统详解
Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...
- java.io.file()_Java IO(一):IO和File
一.IO 大多数的应用程序都要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.IO就是指应用程序对这些设备的数据输入与输出,Java语言定义了许多类专门负责各种方式的输入.输出,这些类都被放在 ...
- java io 输出流_Java IO 输入和输出流
数据流是指一组有顺序的,有起点和终点的字节集合. 最初的版本中,java.io 包中的流只有普通的字节流,即以 byte 为基本处理单位的流.字节流用来读写 8 位的数据,由于不会对数据做任何转换,因 ...
- java io 结构_java 的IO类库的基本架构
java IO 操作的类在java.io 包中,大概可以分为以下几组: 基于字节操作的接口:InputStream 和 OutputStream 基于字符操作的接口:Writer 和 Reader 基 ...
最新文章
- 南通市公积金信息系统goldengate复制软件采购
- Linux服务器安装python3.6.1 运行爬虫
- 【机器视觉】 set_fuzzy_measure_norm_pair算子
- 计算机技术与自动化期刊官网,计算技术与自动化是什么级别
- 数据结构和算法——栈、队列、堆
- 扩展Python模块系列(二)----一个简单的例子
- 标题排版字幕动画fcpx模板:Typography Titles for Mac
- Lync2013 升级错误总结2 Lync2013 PC和手机客户端登录无法验证
- linux 间隔时间中断测试
- 最小生成树 POJ - 3522(枚举边最小生成树)
- GoodUserInterface 模仿页面功能
- Systemd基础篇:systemd vs SysVinit
- 打击感在动作游戏中如何实现?【战斗篇】
- Riverbed:SDN向广域网扩展为企业带来哪些价值
- 路径导航与启发式搜索
- SpringBoot 开发案例之各种参数传递,以及前端代码和postman测试(完整版)
- 阿里云物联网平台测试知识点梳理
- 计算机硬件系统的五大基本组成部分分别是,计算机的硬件系统由几大部分构成,分别包括哪些硬件,基本功能是什么?...
- [MATLAB]从键盘输入一个带有字母构成的字符串,要求大写变小写,小写变大写输出。
- 加速度计和陀螺仪原理