При выполнении следующего кода 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 запущенных потока ждут, пока третий третий разрешит этот барьер. Однако, согласно документации API Java для CyclicBarrier, CyclicBarrier
это
Средство синхронизации, которое позволяет набору потоков ожидать друг друга, чтобы достичь общей точки барьера.
Меня смущает то, как они "ждут друг друга",
Вопросы: означает ли "ожидание друг друга" циклическое ожидание? Если да, то как? Строго говоря, это тупиковая ситуация?
CyclicBarrier
- person Rui   schedule 12.07.2018