CountDownLatch和CyclicBarrier的用法
CountDownLatch 用法
// 用于多线程的统计 -1
final CountDownLatch countDownLatch = new CountDownLatch(2);
countDownLatch.countDown(); // 调用一次就-1 ,可以将对象传到其它线程调用
System.out.println("countDownLatch = " + countDownLatch);
// countDownLatch.await(); // countDownLatch 的值不为0的话,会一直等待
boolean await = countDownLatch.await(1, TimeUnit.SECONDS);// 等待 3秒,如果countDownLatch 不为0返回false
System.out.println("await = " + await);
// CyclicBarrier
public static void main(String[] args) throws InterruptedException, BrokenBarrierException, TimeoutException {
// 三条线程, 必须所有线程都完成了,再往下走
final CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
for (int i = 0; i < cyclicBarrier.getParties(); i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("aaaa");
try {
// Thread.sleep(3000);
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
});
thread.start();
}
cyclicBarrier.await(1,TimeUnit.SECONDS); // 如超过等待时间的话,没有越过,就往下走
final int parties = cyclicBarrier.getParties();
System.out.println("parties = " + parties);
}

浙公网安备 33010602011771号