【发布时间】:2018-12-20 21:47:45
【问题描述】:
运行以下代码时,2个启动线程将被CyclicBarrier *对象锁定,无限等待第三个线程解锁
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class MainDeadlock {
public static void main(String[] args) throws InterruptedException {
final CyclicBarrier c = new CyclicBarrier(3);
Runnable r = () -> {
try {
c.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("Run!");
};
new Thread(r).start();
new Thread(r).start();
}
}
所以 2 个启动的 线程 正在等待第三个线程来解决这个 障碍。但是,根据CyclicBarrier的Java API文档,CyclicBarrier是
一种同步辅助工具,允许一组线程相互等待以达到共同的障碍点
我对他们如何“互相等待”感到困惑,
问题:“互相等待”是否意味着循环等待?如果是这样,怎么做?严格来说,这是一种僵局吗?
【问题讨论】:
-
我真的建议你去进一步阅读有关死锁的知识。这不是一个。同步辅助的使用不当会导致所有线程无限期地等待吗?是的。这和死锁一样吗?没有。
-
这个比较复杂,不知道
CyclicBarrier的实现方式
标签: java multithreading concurrency barrier