索引
CountDownLatch
例如主线程要等待2个子线程执行完任务后再执行,那就可以创建一个初始值为2的CountDownLatch,在主线程执行等待方法await()就会等待CountDownLatch变为0才能继续执行。此时只需要分别在两个子线程执行完任务后调用countDown()方法一次就可以达到目的。
这是一个线程等待多个线程结束。
CyclicBarrier
如果2个线程之间要同步,必须线程A和线程B都执行完任务后才进行下一步,如何简单实现呢?如果只有一次这样的需求我们还是可以使用CountDownLatch,但是如果我们的需求是不断循环的需要一直有这个同步机制存在,又该如何实现呢?因为CountDownLatch在变为0时已经不可以使用了,我们必须手工创建一个新的CountDownLatch,并且设置初始值为2才可以,但是Java其实有一个内置的类帮助我们实现这种循环同步的需求,就是CyclicBarrier。
CyclicBarrier可以在同步量变为0时自动调用一个我们制定的方法,并且还会自动将同步量改为初始的2。使用这个类就不需要我们自己重新new一个CountDownLatch了,很方便。
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2765