我有一个线程在等待通知或超时
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循环继续运行。
为什么?
答案 0 :(得分:0)
您可以在while循环条件项中使用布尔值,因为当您发送中断命令时,它不会停止线程,并且线程本身会决定何时停止自身