我分析了jdk1.8中的代码,但在其他jdk版本中可能存在相同的问题
parties = 3并且count> = 0,所以返回值 getNumberWaiting() 但在某些情况下,超过3个线程 2.让我们看看cyclicBarrier中的关键代码
a)位置2的线程A将返回0,现在有2个线程在位置3等待
b)在线程A执行lock.unlock()之后,位置1的线程B获得了该锁(但是该锁不公平),所以现在index = 2,count = 2,它将在位置3等待,所以现在在位置3中有 3个线程在等待
c)假设,锁定总是由位置1处的线程获得,因此等待线程的数量将越来越多
所以 getNumberWaiting()> 3 是结果
getNumberWaiting()= (循环号)*参与者-计数