interrupt(),interrupted() 和isInterrupted()使用

Thread类中的三个方法:

    public void interrupt() // 无返回值
    public boolean isInterrupted() // 有返回值
    public static boolean interrupted() // 静态,有返回值

① interrupt():中断本线程
myThread.interrupt();//中断的是调用interrupt()方法的线程
小结:阻塞于wait/join/sleep的线程,中断状态会被清除掉,同时收到著名的InterruptedException;而其他情况中断状态都被设置,并不一定收到异常。
② isInterrupted():检测本线程是否已经中断
myThread.isInterrupted();//判断本线程myThread是否中断
如果已经中断,则返回true,否则false。中断状态不受该方法的影响。
如果中断调用时线程已经不处于活动状态,则返回false。
③ interrupted():检测当前线程是否已经中断
Thread.interrupted();//判断该语句所在线程是否中断
如果已经中断,则返回true,否则false,并清除中断状态。换言之,如果该方法被连续调用两次,第二次必将返回false,除非在第一次与第二次的瞬间线程再次被中断。
如果中断调用时线程已经不处于活动状态,则返回false。

public static boolean interrupted() {
    return currentThread().isInterrupted(true);
}

④ isInterrupted()与interrupted()的区别

isInterrupted()         interrupted()
  实例方法                  类方法
 判断本线程               判断当前线程
仅读取中断状态         读取并清除中断状态

你可能感兴趣的:(Java,多线程并发)