public void interrupt()
public boolean isInterrupted()
public static boolean interrupted()
以下方法:- Object.wait
- Thread.sleep
- Thread.join
- 其他
可中断方法的定义:一些方法使当前线程进入阻塞状态,若是被另一个线程调用被阻塞线程的interrupt方法,则会打断这种阻塞,因此这些方法有时被称为可中断方法,这种打断不是结束线程的生命周期,只是打断了阻塞的状态。
线程内部有一个flag记录当前线程是否被中断。被中断为true。
public void interrupt()
打断的阻塞状态,若是线程处于阻塞状态下执行了此方法,flag被设置true,会抛出InterruptedException
的异常,在以上阻塞状态抛出异常之后会清除Thread中的flag为false。若当前线程不是以上方法导致的阻塞不会抛出异常,flag也不会被清除。public boolean isInterrupted()
判断线程是否被中断,该方法仅仅是对interrupt标识的一个判断,不会产生影响。public static boolean interrupted()
与上面的一样也是判断当前线程是否被中断,但是两者的区别是该方法会判断之后直接擦除掉线程interrupt的flag标记。也就是说如果当前线程被打断之后flag为true,调用此方法后会设置为false,并且一直是false,除非该线程被再次打断。这个场景类似interrupt()
打断了阻塞方法的线程后清除了flag一样。
若是在线程没有执行可中断方法执行执行了
interrupt
之后,再执行可中断方法会立即中断