interrupt,interrupted和isInterrupted

来源:互联网 发布:linux翻看历史命令记录 编辑:程序博客网 时间:2024/06/02 01:58

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
原创粉丝点击