gpt4 book ai didi

java - 轮询空队列 - JCIP list 7.7

转载 作者:行者123 更新时间:2023-11-30 06:20:13 24 4
gpt4 key购买 nike

在此code

public class NoncancelableTask {
public Task getNextTask(BlockingQueue<Task> queue) {
boolean interrupted = false;
try {
while (true) {
try {
return queue.take();
} catch (InterruptedException e) {
interrupted = true;
// fall through and retry
}
}
} finally {
if (interrupted)
Thread.currentThread().interrupt();
}
}

interface Task {
}
}

如果队列已经空怎么办?代码将吞掉第一个异常,然后重试 - 并永远等待?我认为中断的主要思想是取消任务,如果它卡在某些阻塞方法上,如 Thread.sleep、BlockingQueue.take() 等。

有类似问题What is the point of restoring the interrupted status in JCIP listing 7.7? ,但我没有足够的声誉来发表评论

最佳答案

中断的重点不是取消,当你考虑中断逻辑时,两者应该分开。中断可以用于取消,但如上面的示例所示,它也可以被忽略。

可能是 getNextTask(...) 返回的任务非常重要,以至于线程在中断时无法退出。因此,除非程序完全死亡或遇到灾难性错误,否则线程将保持阻塞状态,直到队列中有可用的任务为止。

同样,这不是无限期地等待,而是直到有可用任务为止。该示例之所以重要,是因为它在返回时包含 boolean 检查,这会将中断传递给调用线程。这样,当线程最终解除阻塞时,可以在必要时检查中断是否退出。

关于java - 轮询空队列 - JCIP list 7.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48309580/

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