线程中断

  • public void interrupt()
  • public boolean isInterrupted()
  • public static boolean interrupted()
    以下方法:
  • Object.wait
  • Thread.sleep
  • Thread.join
  • 其他

可中断方法的定义:一些方法使当前线程进入阻塞状态,若是被另一个线程调用被阻塞线程的interrupt方法,则会打断这种阻塞,因此这些方法有时被称为可中断方法,这种打断不是结束线程的生命周期,只是打断了阻塞的状态。

线程内部有一个flag记录当前线程是否被中断。被中断为true。

  1. public void interrupt()打断的阻塞状态,若是线程处于阻塞状态下执行了此方法,flag被设置true,会抛出InterruptedException的异常,在以上阻塞状态抛出异常之后会清除Thread中的flag为false。若当前线程不是以上方法导致的阻塞不会抛出异常,flag也不会被清除。
  2. public boolean isInterrupted()判断线程是否被中断,该方法仅仅是对interrupt标识的一个判断,不会产生影响。
  3. public static boolean interrupted()与上面的一样也是判断当前线程是否被中断,但是两者的区别是该方法会判断之后直接擦除掉线程interrupt的flag标记。也就是说如果当前线程被打断之后flag为true,调用此方法后会设置为false,并且一直是false,除非该线程被再次打断。这个场景类似interrupt()打断了阻塞方法的线程后清除了flag一样。

若是在线程没有执行可中断方法执行执行了interrupt之后,再执行可中断方法会立即中断

原文地址:https://www.cnblogs.com/Mr-GG/p/xian-cheng-zhong-duan.html