几个月之前分别对这两个知识点源码做过一些总结,请参照如下地址
虽说之前有一笔带过两个的区别但是这次随着对技术的理解,再做一次二者的总结
相同点
他们都用作计数器的功能。 |
都是应用于多线程中组团执行任务的模式,以屏障作为线程集结点 |
不同点
计数方式 |
CountDownLatch |
使用.countDown()方法,计数器依次递减
|
CyclicBarrier |
使用.await()方法,count数依次递减,count初始值等于构造器的parties值 |
计数值重置 |
CountDownLatch |
不重置:意味着屏障只能使用一次 |
CyclicBarrier |
重置:可以拥有多次到达屏障的机会,调用reset()方法即可重置 |
线程阻塞 |
CountDownLatch |
阻塞调用await()的线程,也就是所谓的主线程等待另一个或多个线程完成某事
|
CyclicBarrier |
阻塞调用await()的线程,也就是多个子线程互相等待,当所有子线程都完成时一起继续下一个事情 |
查看计数 |
CountDownLatch |
getCount()方法:获取当前计数值,也就是还剩多少个线程名额未执行 |
CyclicBarrier |
gerParties()方法:屏障对象数,初始化屏障对象数
getNumberWaiting()方法:在屏障处等待的线程个数
|
|