中断线程后,Android isInterrupted()返回false

时间:2018-07-19 08:54:31

标签: android multithreading interrupt

我有一个线程在等待通知或超时

  while (!isInterrupted()) {
   try {
    if (!semaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS)) {
      Context context = getContext();
      // this is where i do my stuff
      semaphore.aquire();
    }
  } catch (InterruptedException ignored) {
     ignored.printStackTrace();
  }
}

在我退出应用程序之前,我会在此线程上调用Thread#interrupt()。现在我调试了,因为抛出了InterruptedException,并且取消了等待,所以中断似乎执行得很好。
但是出于某种原因,isInterrupted()在此之后仍然返回true,而while循环继续运行。

为什么?

1 个答案:

答案 0 :(得分:0)

您可以在while循环条件项中使用布尔值,因为当您发送中断命令时,它不会停止线程,并且线程本身会决定何时停止自身