Java中interrupted与isInterrupted方法的区别解析

Java Q&A Hub 使用 GPT-4o-mini 回答

问题:

Java中interrupted和isInterrupted方法的区别?

回答:

在Java中,Thread类提供了两个方法来检查线程的中断状态:interrupted()isInterrupted()。这两个方法的主要区别在于它们的行为和用途。

1. Thread.interrupted()

  • 静态方法:这是一个静态方法,属于Thread类。
  • 清除中断状态:调用此方法会返回当前线程的中断状态,并且会清除该线程的中断状态。这意味着如果你在调用Thread.interrupted()后再次检查中断状态,它将返回false
  • 用于当前线程:此方法总是检查调用它的线程的中断状态。

示例

if (Thread.interrupted()) {
    // 当前线程被中断,且中断状态已被清除
}

2. Thread.isInterrupted()

  • 实例方法:这是一个实例方法,属于Thread对象。
  • 不清除中断状态:调用此方法会返回线程的中断状态,但不会清除该状态。即使调用了isInterrupted(),线程的中断状态仍然保持不变。
  • 用于指定线程:此方法可以用于检查任何线程的中断状态,而不仅仅是调用它的线程。

示例

Thread thread = new Thread();
if (thread.isInterrupted()) {
    // 检查指定线程的中断状态,且中断状态未被清除
}

总结

  • Thread.interrupted()用于检查当前线程的中断状态并清除该状态。
  • Thread.isInterrupted()用于检查指定线程的中断状态且不清除该状态。

在多线程编程中,通常使用isInterrupted()来检查其他线程的中断状态,而使用interrupted()来检查和处理当前线程的中断状态。