gpt4 book ai didi

java - 为什么这里会导致无限循环

转载 作者:行者123 更新时间:2023-12-02 06:21:46 25 4
gpt4 key购买 nike

嗯,我正在阅读一篇涉及java中中断的文章。现在我不太明白一个示例,如下所示: enter image description here

我想知道为什么它会导致无限循环。“它无法提前恢复中断状态”是什么意思。 感谢任何帮助。谢谢。

最佳答案

I'm wondering why it will cause an infinite loop there.What does "It can't restore the interrupt status earlier" mean.

因此,通常您会在 catch block 中立即恢复中断状态。但是,如果在这种情况下这样做,然后循环并再次调用 take(),则会导致再次抛出 InterruptedException 和无限循环。

对我来说,代码的问题是,如果线程被中断,为什么代码会循环并再次调用 take() 。通常我们处于这样的循环中:

 while (!Thread.currentThread().isInterrupted()) {
...
}

也许代码的作者混淆了虚假唤醒和虚假中断?我认为后者实际上不会发生。当然会发生虚假唤醒,但这些唤醒是由 queue.take() 方法在内部处理的。

通常我们使用如下代码恢复线程中断状态:

 try {
queue.take();
} catch (InterruptedException ie) {
// because catching InterruptedException clears the thread interrupt bit,
// we immediately re-interrupt the current thread.
Thread.currentThread().interrupt();
// handle the interrupt here by quitting or returning or ...
}

关于java - 为什么这里会导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com