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();
}
intertupt方法的核心在于interrupt0()方法,这个方法只会将interruptFlag设置为true,虽然设置flag为true了,但是并不会中断当前线程,只有在线程运行能产生InterrupteException的方法时,jvm会自动中断线程并将线程的中断标志位清除,重新设置位false。
public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
interrupted方法主要是获取当前线程currentThread,并通过当前线程调用isInterrupted(true),参数true表示线程调用该方法之后会将中断标志位清零,重新设置为false
public boolean isInterrupted() {
return isInterrupted(false);
}
private native boolean isInterrupted(boolean ClearInterrupted);
isInterrupted()方法底层时调用的java的本地方法isInterrupted(boolean ClearInterrupted),参数ClearInterrupted默认是false,说明直接调用isInterrupted()是不会重新将标志位置为false,而且isInterrupted()是将调用该方法的对象所在线程的中断标志位设置为fasle
当前线程和调用线程不一定相同,比如当前线程是A,在A中调用线程B对象的isInterrupted()方法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。