我正在阅读多线程,并涉及到了多线程的概念,我读了它们的区别以及何时应该使用它们,但是我不明白为什么Java有两个做相同工作的类?
CyclicBarrier
可以做到的所有事情CountDownLatch
,那么为什么CountDownLatch
在Java标准库中呢?
CyclicBarrier可以完成CountDownLatch的所有工作,那么为什么Java标准库中的isCountDownLatch呢?
并不是的。
两者之间最大的区别不是一个是可重用的,另一个是不可重用的。区别在于状态更改的时间。对于闩锁-当有人(这是键!)调用countDown()方法时,对于屏障-当线程(那是键)到达await()方法时。
因此,基本上,我们在这里有不同的度量单位-一种以对countDown()的调用数进行操作,而另一种以等待线程数进行操作
考虑2个例子:
// thread 1 for (int i = 0; i < 10; i++) { latch.countDown() //perfectly fine } //thread 2 for (int i = 0; i < 10; i++) { barrier.await() //oops }
有效地考虑到两者都是针对不同事物的计数器,它们的特征以某种方式相交。