Java线程中断

概述

Java线程中断机制是线程间的一种协作机制,通常用于一条线程通知另外一条线程终止。被通知终止的线程并不是马上终止,而是在合适的时刻对通知进行响应并安全终止

核心方法

  • thread.interrupt() 将线程thread的中断状态标记为中断
  • thread.isInterrupted() 获取线程thread的中断状态
  • Thread.interrupted() 获取当前线程的中断状态,且将当前线程的中断状态标记为非中断

响应中断

循环检查响应

public class InterruptibleThread extends Thread {  
    @Override  
    public void run() {  
        // 程序定期检查中断状态并响应
        while (!Thread.currentThread().isInterrupted()) {  
            // do something  
        }  
    }  
}

因调用以下方法进入waiting或timed wating状态的线程,可响应中断,响应方式为抛出InterruptedException,并把当前线程的中断状态标记为非中断

  • object.wait()
  • object.wait(long)
  • thread.join()
  • thread.join(long)
  • Thread.sleep(long)

因调用以下方法进入waiting或timed wating状态的线程,可响应中断,响应方式为直接从方法返回,不抛出异常,当前线程的中断状态保持为中断

  • LockSupport.park()
  • LockSupport.parkNanos(long)
  • LockSupport.parkUntil(long)

线程处于blocked状态的阻塞(等待监视器锁)或处于runnable状态的阻塞(等待操作系统I/O资源)不会响应中断