Java捕获InterruptedException异常后,会自动清空中断状态
InterruptedException
异常一般是在一个线程处于等待(像Thread.sleep()
、Object.wait()
、Thread.join()
等方法)状态时被另一个线程调用interrupt()
方法中断而抛出的。一旦捕获到InterruptedException
,Java 会自动清除该线程的中断状态。
以下代码可以说明这一点:
public class InterruptedExceptionExample {public static void main(String[] args) {Thread thread = new Thread(() -> {try {System.out.println("线程开始睡眠");// 让线程睡眠Thread.sleep(5000); } catch (InterruptedException e) {System.out.println("线程被中断,捕获到 InterruptedException");// 检查中断状态System.out.println("捕获异常后中断状态: " + Thread.currentThread().isInterrupted()); // falseThread.currentThread().interrupt(); // 重新设置中断(恢复中断)System.out.println(Thread.currentThread().isInterrupted()); // true}});thread.start();// 主线程睡眠 1 秒后中断子线程try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// 中断线程thread.interrupt(); }
}
在上述代码中,子线程开始睡眠 5 秒,主线程睡眠 1 秒后中断子线程。子线程捕获到InterruptedException
异常,然后输出捕获异常后的中断状态。由于 Java 会自动清除中断状态,所以输出的中断状态为false
,此时线程可以重新响应中断。
总的来说,当捕获InterruptedException
异常时,线程的中断状态会被自动清除,这是 Java 处理线程中断的一种机制。