关于Thread的interrupt
关于Thread的interrupt
Thread的interrupt方法会引发线程中断。
主要有以下几个作用:
如Object的wait方法,Thread的sleep等等这些能够抛出InterruptedException异常的方法,在遇到调用对应线程的interrupt方法后就会抛出InterruptedException异常。
抛出InterruptedException时同时会重置中断状态
如下面代码
Thread t=new Thread(()->{
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//由于InterruptedException异常清空了中断状态,这里的Thread.interrupted()返回的是false
System.out.println("interrupt statu: "+Thread.interrupted());
});
t.start();
Thread.sleep(3000);
t.interrupt();
Thread.currentThread().join();
interrupt调用之后再执行sleep之类,也会抛出InterruptedException异常
Thread t=new Thread(()->{
Thread.currentThread().interrupt();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//会抛出异常,走到这里
e.printStackTrace();
}
});
t.start();
LockSupport.park在使当前线程暂停后,调用interrupt方法也会使线程重新唤醒,执行后续代码。
2、关于Thread的isInterrupted方法
public static boolean isInterrupted()
public boolean isInterrupted()
上面两个方法都是检测线程是否被中断,也就是是否调用了interrupt方法。内部都是调用了native方法isInterrupted。
/**
* Tests if some Thread has been interrupted. The interrupted state
* is reset or not based on the value of ClearInterrupted that is
* passed.
*/
//测试线程是否已被中断。 由于ClearInterrupted的值来决定是否重置中断状态。
private native boolean isInterrupted(boolean ClearInterrupted);
但是有一些区别
public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
这个静态方法使判断当前线程是否被中断,isInterrupted里面的入参是true,表示清空中断状态,也就是如果对应线程调用了interrupt进行了中断后,如果连续调用这个方法两次返回值是不一样的,第一次返回true,第二次返回false。因为第一次调用时会重置中断状态。
public boolean isInterrupted() {
return isInterrupted(false);
}
这个方法isInterrupted里面的入参是false,不会重置中断状态。也就是如果对应线程调用了interrupt进行了中断后,如果连续调用两次这个方法返回值都是一样的,都是true。
如果在调用interrupt进行中断的线程结束后,调用上述两个中断检测,返回值也是false
关于Thread的interrupt的更多相关文章
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...
- java中Thread的 interrupt异常处理
http://blog.csdn.net/srzhz/article/details/6804756
- Java Thread interrupt
现有线程对象threadA,调用threadA.interrupt(),则threadA中interrupted状态会被置成false,很多线程中都是通过isInterrupted()方法来检测线程是 ...
- 关于Thread类中三个interrupt方法的研究与学习(转)
先看三个方法原型: public void interrupt(): public boolean isInterrupted(): public static boolean interrupted ...
- Thread之八:interrupt中断
Java中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,它只是要求被中断线程在合适的时机中断自己,这需要被中断的线程自己处理中断.这好比是家里的父母叮嘱在外的子女要注意身体,但子女是 ...
- Thread的中断机制(interrupt)
先看收集了别人的文章,全面的了解下java的中断: 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的 ...
- (转)Thread的中断机制(interrupt)
先看收集了别人的文章,全面的了解下java的中断: 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的 ...
- Java Thread.interrupt interrupted
Java Thread.interrupt @(Base)[JDK, 线程, interrupt] 原文地址,转载请注明 下面这个场景你可能很熟悉,我们调用Thread.sleep(),conditi ...
- Thread的中断机制(interrupt),循环线程停止的方法
一.中断原理 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个 ...
随机推荐
- 【HTML】实战阿里云src页面css模仿基础学习
实战结果页面gif图片 阿里云src首页模仿完整代码(500行左右) <!DOCTYPE html> <html> <head> <meta charset= ...
- AT4119-[ARC096C]Everything on It【斯特林数,容斥】
正题 题目链接:https://www.luogu.com.cn/problem/AT4119 题目大意 一个集合\(S=\{k\in[1,n]\cup N\}\),它的所有子集作为元素组成的集合中要 ...
- P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】
正题 题目链接:https://www.luogu.com.cn/problem/P4345 题目大意 \(T\)组询问,给出\(n,k\)求 \[\sum_{i=0}^{k}\binom{n}{i} ...
- 基于SpringBoot+Mybatis plus+React.js实现条件选择切换搜索功能
笔记/朱季谦 在写React前端逻辑时,经常遇到可以切换不同条件的列表查询功能,例如下边截图这样的,其实,这块代码基本都一个逻辑,可以一次性将实现过程记录下来,待以后再遇到时,直接根据笔记复用即可. ...
- Springboot2.0整合Redis(注解开发)
一. pom.xm文件引入对应jar包 <dependency> <groupId>org.springframework.boot</groupId> <a ...
- AngularJS的简单实用
Angular Js 的初步认识和使用 一: 1.模块化 定义模块和控制器 ng-app="myapp" controller=&qu ...
- 使用Dom4j、反射自定义实现xml与java对象互转
一.前言 国庆假期临近,工作动力不强.所以写几篇之前项目中自己用到的一些可能有用的东西分享出来. 今天分享的是Xml与javaBean互转的自定义实现. 先说几种我知道的Xml与javaBean互转的 ...
- SSA
wikipedia上关于SSA的定义如下: In compiler design, static single assignment form (often abbreviated as SSA fo ...
- hexo配合github action 自动构建(多种形式)
已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...
- 如何用redis统计海量UV?
前言 我们先思考一个常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现? 统计uv的常用方法以及优缺点 其 ...