我有一堆执行计算的线程。它们使用 CyclicBarrier
“同步” 。当任何线程的 run()
方法完成后,我希望所有其他线程在调用 await()
后也退出下次就在障碍物上。
到目前为止,我尝试过的所有内容都卡在 await()
调用或结果导致屏障破裂。有什么建议吗?
编辑:这是(基本)代码:
public MyClass implements Runnable {
public void run() {
while (true) {
if (someCondition) {
// quit other threads when they call await()
return;
}
barrier.await();
}
}
最佳答案
reset() 将唤醒所有等待线程并抛出异常
然后你可以像这样使用await
private static volatile boolean shouldStop=false;
public void run() {
try{
while (true) {
if (someCondition) {
// quit other threads when they call await()
return;
}
try{
if(shouldStop)return;
barrier.await();
}catch(BrokenBarrierException e){
//someone stopped
return;
}
}
}finally{
shouldStop =true;
barrier.reset();
}
}
您还可以调用 if(shouldStop)
检查的方法
关于Java - 优雅地退出线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513041/