gpt4 book ai didi

Java:如果加入线程不起作用:中断还是继续?

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

如果加入线程不起作用,建议做什么?

        for (List t : threads) {
try {
t.join();
} catch (InterruptedException e) {
log.error("Thread " + t.getId() + " interrupted: " + e);
// and now?
}
}

是否建议中断(然后其他尚未加入的线程会发生什么情况?)还是您至少应该尝试加入其余线程然后继续?

多谢指教!

==> 结论:你应该重新尝试加入特定的线程t,或者你应该中断这个特定的线程t继续。

     for (List t : threads) {
try {
t.join();
} catch (InterruptedException e) {
try {
// try once! again:
t.join();
} catch (InterruptedException ex) {
// once again exception caught, so:
t.interrupt();
}
}
}

那么您如何看待这个解决方案?做“t.interrupt()”是正确的还是应该是 Thread.currentThread().interrupt(); ?

谢谢! :-)

最佳答案

你得到一个 InterruptedException 因为一些其他线程中断了这个,加入,线程而不是因为 join 没有“工作”。转自API documentation :

InterruptedException - if another thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.


我会建议你重新加入线程,例如:

for (List t : threads) {
while (true) {
try {
t.join();
break;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// ... and ignore the interrupt
}
}
}

关于Java:如果加入线程不起作用:中断还是继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411547/

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