interrupt,interrupted和isInterrupted

Thread.interrupt
Thread.interrupt用来中断当前执行的线程。它并不会像Thread.stop那样直接停止正在运行的线程,
而是设置该线程的中断状态位为true,然后可以在线程里通过interrupted或isInterrupted来判断中断标
从而退出程序执行过程。

interrupted和isinterrupted
interrupted和isInterrupted都是判断线程的中断标志是否设置为true。但他们有明显的区别
看一下这两个方法的具体实现:

1.interrupted

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

interrupted直接调用当前线程的isInterrupted(true)方法,只作用于当前线程,另外这里isInterrupted的参数
是true, 这个参数代表啥意思呢?
我们再来看看isInterrupted方法在native 层的定义

private native boolean isInterrupted( boolean ClearInterrupted);

通过参数名我们能猜到它代表是否要清除状态位。如果这个参数为true,说明返回线程的状态位后还要清掉原来的状态位(恢复成原来情况)。这个参数为false,就是直接返回线程的状态位。

2.isInterrupted

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

isInterrupted 是作用于调用该方法的线程对象所对应的线程。调用者有可能运行在本线程,也有可能
运行在其他线程,而且isInterrupted的参数为false,从前面对isInterrupted的说明可知,它不会更改
线程原来的状态位。

现在我们可以将interrupt,interrupted,isInterrupted简单总结如下:
1.interrupt不是像stop那样直接中断线程,而是向线程里面设置了一个中断标志位;
2.interrupted 判断当前线程是否设置了中断标志,是一个静态方法,仅仅作用于本线程,同时它被调用后
线程的中断标志会被清除。
3.isInterrupted 判断线程是否设置了中断标志,他的用者有可能运行在本线程,也有可能运行在其他线程,同时它
不会清除线程的中断标志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值