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 判断线程是否设置了中断标志,他的用者有可能运行在本线程,也有可能运行在其他线程,同时它
不会清除线程的中断标志。