【每日阅读】2020年12月27日-CountDownLatch和CyclicBarrier

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

(0)
geekgaogeekgao博主
上一篇 2020年12月25日
下一篇 2020年12月29日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

GitHub
分享本页
返回顶部

Warning: error_log(/usr/local/lighthouse/softwares/wordpress/wp-content/plugins/spider-analyser/#log/log-2601.txt): failed to open stream: No such file or directory in /usr/local/lighthouse/softwares/wordpress/wp-content/plugins/spider-analyser/spider.class.php on line 2900