CyclicBarrier 和 CountDownLatch 看起来很相似,请对比下~
并发编程 287
它们的行为有一定相似度,区别主要在于
- CountDownLatch 是不可以重置的,所以无法重用,CyclicBarrier 没 有这种限制,可以重用。
- CountDownLatch 的 基 本 操 作 组 合 是 countDown/await, 调 用 await 的线程阻塞等待 countDown 足够的次数,不管你是在一个线
程还是多个线程里 countDown,只要次数足够即可。 CyclicBarrier 的基本操作组合就是 await,当所有的伙伴都调用了 await,才会继续 进行任务,并自动进行重置。 - CountDownLatch 目的是让一个线程等待其他 N 个线程达到某个条 件后,自己再去做某个事(通过 CyclicBarrier 的第二个构造方法 public CyclicBarrier(int parties, Runnable barrierAction),在新线 程里做事可以达到同样的效果)。而 CyclicBarrier 的目的是让 N 多 线程互相等待直到所有的都达到某个状态,然后这 N 个线程再继续执 行各自后续(通过 CountDownLatch 在某些场合也能完成类似的效
果)。
-
它们的行为有一定相似度,区别主要在于
- CountDownLatch 是不可以重置的,所以无法重用,CyclicBarrier 没 有这种限制,可以重用。
- CountDownLatch 的 基 本 操 作 组 合 是 countDown/await, 调 用 await 的线程阻塞等待 countDown 足够的次数,不管你是在一个线
程还是多个线程里 countDown,只要次数足够即可。 CyclicBarrier 的基本操作组合就是 await,当所有的伙伴都调用了 await,才会继续 进行任务,并自动进行重置。 - CountDownLatch 目的是让一个线程等待其他 N 个线程达到某个条 件后,自己再去做某个事(通过 CyclicBarrier 的第二个构造方法 public CyclicBarrier(int parties, Runnable barrierAction),在新线 程里做事可以达到同样的效果)。而 CyclicBarrier 的目的是让 N 多 线程互相等待直到所有的都达到某个状态,然后这 N 个线程再继续执 行各自后续(通过 CountDownLatch 在某些场合也能完成类似的效
果)。
1个月前