【Java并发编程】interrupt
来源:互联网 发布:北大青鸟网络授课 编辑:程序博客网 时间:2024/06/07 01:35
interrup是用来告诉线程应该停下来,去做些其他别的事情。但是这取决于编程人员的态度,他可以决定一个线程应该怎样对到来的interrupt做出反应。我们通过调用某个Thread对象的interrupt方法,来告诉那个线程我希望你能中断下来,但是,这只是一厢情愿,具体收到请求的Thread线程怎样处理接下来的事情完全取决于它自己。但是,通常来讲,它应该将自己设计成可以响应这种中断请求的。
这里不得不提到一个Exception,InterruptedException,顾名思义,该异常是要处理中断异常的,在上一节的内容中,Thread.sleep方法就会抛出该异常,该异常是需要通过try-catch处理的(也叫CheckedException,与之相对的是RuntimeException),后面要说到的Thread.wait方法等都是会抛出该异常的。该异常的设计初衷就是这样一种机制,当一个任务要执行或者可能执行很长时间的时候,我们将该方法设计成抛出该异常。意味着设计方法的人很明确的说明了,我这个方法设计成了可以响应中断的。比如:
for (int i = 0; i < importantInfo.length; i++) { try { Thread.sleep(4000); } catch (InterruptedException e) { // 如果该线程正在sleep中, // 调用了该线程实例的interrupt方法后,代码会走到这里 // 这里我们暂时什么也不做。 return; } // Print a message System.out.println(importantInfo[i]);}
既然系统的方法可以设计成支持中断机制的,那么我们自己的方法如何设计成支持中断方法呢?
interrupt方法中做了一个重要的事情,就是将代表着中断的flag设置为true。isInterrupted方法用来检验该标志位,interrupted方法(注意区别-ed)用来检验该标志位的同时,清除该标志位,也就是将其设置为false。
前面说过中断机制本身是一种请求其中断的机制,不是强制其马上停止手上事情的机制。该请求的含义就蕴藏在这个标志位上。
于是我们可以设计自己的可中断的方法。
public void heavyWorkMethod() { for (int i = 0; i < bigNum; i++) { //每一个循环开始的时候,判断是否被中断 if (Thread.isInterrupted()) { //什么都不做,直接返回 return; } // heavy work here heavyWork(); }}
当然,我们也可以将方法设计成抛出InterruptException,这样我们可以统一在catch中处理该中断请求。
public void heavyWorkMethod() throws InterruptException { for (int i = 0; i < bigNum; i++) { //每一个循环开始的时候,判断是否被中断 if (Thread.isInterrupted()) { //这里有一个惯例,也就是一个很弱的约定 //当一个线程抛出了InterruptException的时候 //它的flag标志位是应该清除的。 Thread.interrupted(); //我们抛出异常, 要求调用该方法的时处理该异常 throw new InterruptException(); } // heavy work here heavyWork(); }}
- 【Java并发编程】interrupt
- Java并发编程-interrupt()方法
- java并发中的interrupt
- Java并发编程中的join()与interrupt()函数
- java并发编程的一些小记录之interrupt
- java并发编程学习之interrupt相关方法学习(一)
- java并发编程学习之interrupt相关方法学习(二)
- Java多线程/并发08、中断线程 interrupt()
- java线程编程中 interrupt 的使用
- Java interrupt
- Java并发编程 并发容器
- JAVA并发编程--并发模式
- JAVA并发-并发编程概述
- java并发编程----并发模型
- 【Java并发编程】并发集合
- java多线程编程核心技术笔记-停止线程interrupt()方法
- 【Java并发编程】并发编程大合集
- 【Java并发编程】并发编程大合集
- Object的wait、notify来实现线程同步原理
- 从零构建 vue2 + vue-router + vuex 开发环境到入门,实现基本的登录退出功能
- 基于layer上传查看图片
- OpenCv图片旋转
- js字符串操作
- 【Java并发编程】interrupt
- 在 ErrorLog 日志中开启死锁标记
- CSS-深入理解之margin
- 获取列表元素(Directive,selector,ContentChildren)
- java中Double类型的运算精度问题
- 设计模式之工厂模式
- loading 样式添加
- 用C语言编写简易计算器
- 向ElasticSearch批量导入数据