Thread中断的理解

★中断的理解: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);
}

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

转载于:https://my.oschina.net/u/3866531/blog/2246650

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值