gpt4 book ai didi

java - Java中的线程中断

转载 作者:搜寻专家 更新时间:2023-11-01 02:45:49 24 4
gpt4 key购买 nike

我想澄清一下线程中断。

如果线程长时间不调用抛出 InterruptedException 的方法怎么办?然后它必须定期调用 Thread.interrupted,如果已收到中断,则返回 true。例如:

for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}
}

当我调用方法 Thread.interrupt() 时,它会抛出中断异常,所以,为什么我需要执行 if (Thread.interrupted()) 我会简单地执行那个

try {
for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}
}
} catch (InterruptedException ex) {
...
}

最佳答案

当您在另一个线程上调用 Thread.interrupt() 时,会发生两件事:

  1. 该线程的中断标志已设置。
  2. 如果线程在抛出 InterruptedException 的方法中被阻塞,该方法将立即抛出异常。

如果线程忙于某些抛出InterruptedException的代码,您将不会得到任何异常。这就是为什么您需要检查 if (Thread.interrupted()),以检查标志。

在您的示例代码中,Java 编译器会提示 catch block 无效,因为 try block 中的所有代码都不会抛出 InterruptedException

关于java - Java中的线程中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356082/

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