CountDownLatch和CyclicBarrier主要解决线程的调度问题。例如如下场景:订单的对账,订单系统完成的订单和已经派发的订单的对账,对于有异常的订单要修复。这里是3个操作,见下面伪代码
1 | Order order=getOrder(); |
如果每天的订单量很大这就会很耗时,我们可以考虑串行的方法,可以用线程池的方法同时去查询俩个订单,然后在check这时候我们要解决线程调度的问题,CountDownLatch就排上了用场,代码如下
1 | CountDownLatch countDownLatch = new CountDownLatch(2); |
不过这里checkAndFix还是主线程串行的能否在进一步优化呢,答案是能这里用到CyclicBarrier
1 | ExecutorService callBack = Executors.newFixedThreadPool(1); |
CyclicBarrier和CountDownLatch的区别是可重入的,当见到0还会从2开始。另外CyclicBarrier可以设置Callback