我分析了jdk1.8中的代码,但在其他jdk版本中可能有同样的问题
让我们假设以下代码中的当事方 = 3
CyclicBarrier cb = 新的 CyclicBarrier(3);
party = 3 and count > = 0,所以getNumberWaiting()的返回值<= 3 但是在某些情况下,会有超过3个线程在等待 2.让我们看看CyclicBarrier中的关键代码
a) 位置 2 的线程 A 将返回 0,现在位置 3有 2 个线程等待
b) 线程A执行lock.unlock()后,位置1的线程B得到锁(但锁不公平),所以现在index = 2,count =2,它会在位置3等待,所以现在有3线程在位置 3等待
c) 假设,锁总是由位置1的线程获得,所以等待线程的数量会越来越多
所以getNumberWaiting() > 3是结果
getNumberWaiting() = (循环数) * 各方 - 计数