文档章节

关于java中的interrupt

Lubby
 Lubby
发布于 2016/02/18 19:44
字数 386
阅读 199
收藏 1

一、概念

java中线程有开始,运行(就绪,运行),阻塞,等待,终止这几种状态。其中在等待的时候可以通过设置中断标志位来唤醒线程。一般情况下等待状态的线程检查到中断标志被置位,则会抛出InterruptedException异常,捕获异常,复位中断标志,可以使线程继续运行。

thread.interrupt()  设置中断标识位

Thread.interrupt() 回复中断标识位

thread.isInterrupted()  返回中断标识位

什么情况下可以使用Interrunpt

(1)如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个InterruptedException异常。这个时候,我们可以通过捕获InterruptedException异常来终止线程的执行,具体可以通过return等退出或改变共享变量的值使其退出。

(2)如果该线程在可中断的通道上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。这时候处理方法一样,只是捕获的异常不一样而已。


二、代码

public static void main(String[] args) {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                TimeUnit.SECONDS.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println(e.getStackTrace());
                System.out.println("thread is interrupt ? >>> " + Thread.currentThread().isInterrupted());
                Thread.currentThread().interrupt();
                System.out.println("thread is interrupt ? >>> " + Thread.currentThread().isInterrupted());
            }
        }
    });

    thread.start();
    try {
        TimeUnit.SECONDS.sleep(5);
    } catch (InterruptedException e) {
    }

    thread.interrupt();
}

输出结果:

[Ljava.lang.StackTraceElement;@1e0c386d

thread is interrupt ? >>> false

thread is interrupt ? >>> true


© 著作权归作者所有

共有 人打赏支持
Lubby
粉丝 53
博文 89
码字总数 48522
作品 0
杭州
程序员
Java多线程之interrupt()的深度研究

原文地址:http://www.cnblogs.com/carmanloneliness/p/3516405.html 近期学习Java多线程的中断机制,网上的帖子说得很浅,并没深究其原理。看了Java源码,对Java的中断机制有了略深入的理解...

恶魔在江湖
2014/02/18
0
0
多线程编程读书笔记之线程中断的本质

Java试图提供过抢占式限制中断,但问题多多,例如已被废弃的Thread.stop、Thread.suspend和 Thread.resume等。另一方面,出于Java应用代码的健壮性的考虑,降低了编程门槛,减少不清楚底层机...

刘学炜
2012/07/03
0
0
Java Thread及其synchronized,wait,sleep,join,yeid,interrupt

Java SE7 API - Thread: http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#yield%28%29 参考资料:http://blog.csdn.net/lqqmisslll/article/details/54208491 一、线程的简......

YuanyuanL
2015/08/12
0
0
JAVA多线程-基础Synchronized

后篇: JAVA多线程-基础Lock Condition 并发集合 JAVA多线程-交互计算 Future Callable Promise 读懂代码,首先要懂得thread的几个状态,以及它们之间的转换. Java thread的状态有new, runnable...

xpbug
2012/11/07
0
10
Exec Maven Plugin全面解析和使用示例

1.为什么使用exec? 现在的工程往往依赖众多的jar包,不像war包工程,对于那些打包成jar包形式的本地java应用来说,通过java命令启动将会是一件极为繁琐的事情,原因很简单,太多的依赖让参数...

劲风online
2015/03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
41分钟前
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
52分钟前
0
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
0
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部