文档章节

关于java中的interrupt

Lubby
 Lubby
发布于 2016/02/18 19:44
字数 386
阅读 200
收藏 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
粉丝 54
博文 92
码字总数 49445
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

io流

码农屌丝
19分钟前
0
0
SpringBoot基础篇之重名Bean的解决与多实例选择

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 当通过接口的方式注入Bean时,如果有多个子类的bean存在时,具体哪个bean会被注入呢?系统中能否存在两个重名的bean呢?如果可以,那么怎么...

小灰灰Blog
29分钟前
0
0
记录一次dubbo项目实战

一、案例说明 存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表。 二、环境搭建 安装zookeeper,解压(zookeeper-3.4.8.tar.gz)得到如下: 然后进入conf将zoo_s...

Java烂猪皮
33分钟前
0
0
拜托,别再问怎么深入学习分布式架构了!

由于分布式系统所涉及到的领域众多,知识庞杂,很多新人在最初往往找不到头绪,不知道从何处下手来一步步学习分布式架构。 本文试图通过一个最简单的、常用的分布式系统,来阐述分布式系统中...

Java架构资源分享
34分钟前
0
0
《netty入门与实战》笔记-05:心跳与空闲检测

本小节,我们一起探讨最后一个话题:心跳与空闲检测 首先,我们来看一下,客户端与服务端之间的网络会存在什么问题? 1. 网络问题 下图是网络应用程序普遍会遇到的一个问题:连接假死 连接假...

Funcy1122
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部