Java报错”InterruptedException”的原因以及解决办法

  • Post category:Java

InterruptedException是Java中常见的异常之一,它通常是由于线程在执行wait()、sleep()、join()等方法时被中断而产生的。在这种情况下,线程会抛出InterruptedException,以表明它已经被中断了。下面是该异常的解决办法:

解决办法1:在异常处理中央处理InterruptedException
当线程中断时,可以通过维护一个标识符来实现干净的停止线程。这时,需要添加一个布尔值的volatile修饰符,以便其他线程可以协调停止任务的运行。

volatile boolean stopThread = false;

public void run() {
   while (!stopThread) {
      try {
         // your code here
      } catch (InterruptedException e) {
         stopThread = true;
         Thread.currentThread().interrupt(); // re-assert interrupt
      }
   }
}

解决办法2:在catch块中重新抛出InterruptedException而不是忽略它
如果在线程等待某些事件的时候被中断,那么通常需要结束当前线程的工作并将它的中断传递给它的调用方。这时应该在catch块中重新抛出InterruptedException,这样线程的调用者就能感知到线程的中断。

try {
   // your code here
} catch (InterruptedException e) {
   Thread.currentThread().interrupt(); // re-assert interrupt
   throw new RuntimeException(e);
}

除了上述的解决办法,还有其他的一些可选的做法,比如使用Thread.isInterrupted()来查询一个线程是否被中断,在一些长时间未响应的I/O读写时,可能需要使用线程池来管理线程的中断等。