gpt4 book ai didi

java - Java 中是否可以进行 "atomic"中断检查?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:53 24 4
gpt4 key购买 nike

如果在 Java 中使用以下带有中断的“成语”,例如 from this answer .

while (!Thread.currentThread().isInterrupted()) {
try {
Object value = queue.take();
handle(value);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}

在哪里take是一个阻塞操作,如果在检查Thread.currentThread().isInterrupted()和调用queue.take之间有中断“到达”,是否可以暂时不忽略中断()?这不是“先检查后行动”的操作吗?如果是这样,是否可以以某种方式保证在线程被中断的任何情况下都保留循环?

可以使用 poll with a timeout以便在超时后继续循环,但是是否可以检查中断状态并以原子方式对其进行操作?

最佳答案

我会交换 try/catch 和 while 循环:

try {
while (true) {
Object value = queue.take();
handle(value);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}

如果线程被中断,take()操作会立即抛出InterruptedException,同时跳出while循环。

关于java - Java 中是否可以进行 "atomic"中断检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37742304/

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