Я анализирую код в jdk1.8, но может иметь такую же проблему в другой версии jdk
Предположим, что party = 3 в следующем коде
CyclicBarrier cb = новый CyclicBarrier (3);
![enter image description here](https://i.stack.imgur.com/WEgcN.png)
сторон = 3 и количество> = 0,поэтому возвращаемое значение getNumberWaiting () <= 3 </strong>, но в некоторых определенных случаях более 3-х потоков будет ожидать 2.let увидит код ключа в CyclicBarrier
![enter image description here](https://i.stack.imgur.com/21bK5.png)
a) нить A в позиции 2 вернет 0, теперь есть 2 нити в позиции 3
b)после того, как поток A выполнит lock.unlock (), поток B в позиции 1 получит блокировку (но блокировка несправедлива), поэтому теперь index = 2, count = 2, он будет ожидать в позиции 3, поэтому теперь есть 3 потока ожидают в позиции 3
в) предположим, что блокировка всегда будет получена потоком из позиции 1, поэтому число ожидающих потоков будет все больше
, поэтому getNumberWaiting ()> 3 является результатом
getNumberWaiting () = (циклические числа) * party - количество