文档章节

Thread中断的理解

k
 karma123
发布于 2018/10/16 09:39
字数 577
阅读 6
收藏 0
JDK

★中断的理解:1)中断可以理解为线程的一个标识位属性;2)表示一个运行中的线程是否被其他线程进行了中断操作

中断好比其他线程向该线程打了个招呼,其他线程通过调用该线程的interrupt()方法对其进行中断操作。

啥意思?

如上图中所示,运行中的线程(main主线程)调用线程countThread的interrupt()方法,向countThread线程打了个“招呼”,对countThread线程做了中断操作。我们看JDK源码中interrupt()方法的源码:

看注释:

// Just to set the interrupt flag

说的非常明白,对标识位进行了设置。就是将 interrupt flag 设置为true。将线程的中断标识位 interrupt flag 属性设置为了true。

为什么说【中断可以理解为线程的一个标识位属性】?

什么叫可以理解为?看一下Thread的JDK源码,实际上找不到这个属性,所以如果有这个属性的话,恐怕也是在更底层(比JDK源码更底层)存在的。所以为了更好的理解,不妨想象有那么一个变量,用来标识线程是否被中断。

线程A可以通过调用线程B的

public void interrupt() {
    if (this != Thread.currentThread())
        checkAccess();

    synchronized (blockerLock) {
        Interruptible b = blocker;
        if (b != null) {
            interrupt0();           // Just to set the interrupt flag
            b.interrupt(this);
            return;
        }
    }
    interrupt0();
}

方法来对线程B进行中断(可以理解为线程A通过调用线程B的interrupe()方法设置了线程B的中断标识位)。

线程A可以通过调用线程B的

public boolean isInterrupted() {
    return isInterrupted(false);
}

方法来查看线程B是否被设置了中断标识位(中断标识位是否为true),并且不清除中断标识位。

线程A可以通过调用静态方法

public static boolean interrupted() {
    return currentThread().isInterrupted(true);
}

方法来对当前线程的中断标识位进行复位。

© 著作权归作者所有

共有 人打赏支持
k
粉丝 7
博文 88
码字总数 65057
作品 0
丰台
私信 提问
对Java中interrupt、interrupted和isInterrupted的理解

今天在看到Thread类的isInterrupted方法可以获取线程的中断状态: 于是写了个例子想验证一下: 内容很简答:主线程main启动了一个子线程Worker,然后让worker睡500ms,而main睡200ms,之后m...

摆渡者
2016/11/13
552
2
Java, Thread的interrupt()方法调用问题。

多线程环境下,调用自身interrupt()方法, 主线程周期性检查,调用子线程isInterrupted()方法,但是仿佛子线程的中断不可见, 无论什么时候子线程都返回 false表示未被中断。 让我不解的是,...

Quintus
2012/05/05
957
0
06-线程的初始化,中断以及其源码讲解

从这里开始,我们来了解线程的创建, 继承Thread类和实现Runnable接口,这两种方式可以说是中规中矩的,也是我们用的比较多的创建线程的方式,后面也是基于继承Thread类和实现Runnable接口的...

G_66_hero
2018/12/30
0
0
「阿里面试系列」面试加分项,从JVM层面了解线程的启动和停止

文章简介 这一篇主要围绕线程状态控制相关的操作分析线程的原理,比如线程的中断,线程的通信等,内容比较多,可能会分两篇文章 阿里面试系列导读:关注我的技术公众号【架构师修炼宝典】一周...

Java架构资源分享
2018/12/11
0
0
关于interrupt

Thread类中有这么几个方法: public void interrupt() public static boolean interrupted() public boolean isInterrupted() interrupt() 中断线程。 如果当前线程没有中断自己(这在任何情...

牧师-Panda
2016/09/07
6
0

没有更多内容

加载失败,请刷新页面

加载更多

一枚戒指,一场仪式,这件事阿里巴巴坚持了15年

为入职满五年的员工举行盛大仪式,为他们每个人戴上私人订制的戒指,是阿里巴巴坚持了15年“五年陈”的传统。1月22日,阿里集团为最新一季的“五年陈”们举行了授戒仪式。 2018五年陈小档案 ...

阿里云官方博客
25分钟前
0
0
前后端常见的几种鉴权方式

什么是鉴权 鉴权是指验证用户访问系统的权力 常用的鉴权有四种: HTTP Basic Authentication session-cookie Token 验证 OAuth(开放授权) HTTP Basic Authentication 这种授权方式是浏览器遵...

小草先森
27分钟前
3
0
Spring Cloud 微服务搭建注意的几个点

参考教程 https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 1)@EnableEurekaServer 引入标红,引入失败 ; @EnableEurekaClient 亦同 其中会出现 @EnableEurekaServer 引入......

阿白
33分钟前
3
0
PyCharm入门教程——在编辑器中打开和重新打开文件

PyCharm最新版本下载 JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web...

电池盒
36分钟前
2
0
数据生产与收集

数据 对于移动端的app来说, 分析的数据大致上都可以分为俩种, 一种是在线数据,一种是离线数据。 在线数据, 即app后端服务所产生的日志数据,例如服务接口的性能数据, 服务接口的调用及其...

hblt-j
44分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部