CountDownLatch
依赖于AbstractQueuedSynchronizer实现的共享同步器
1 | private static final class Sync extends AbstractQueuedSynchronizer { |
await
1 | public void await() throws InterruptedException { |
countDown
1 | public void countDown() { |
实例
1 | public class Test { |
CyclicBarrier
利用ReentrantLock和Condition,来阻塞调用await方法的线程。当满足一定条件,自动唤醒所有的线程。1
2
3
4/** The lock for guarding barrier entry */
private final ReentrantLock lock = new ReentrantLock();
/** Condition to wait on until tripped */
private final Condition trip = lock.newCondition();
1 | public int await() throws InterruptedException, BrokenBarrierException { |
实例
1 | public class CyclicBarrierTest { |
CountDownLatch和CyclicBarrier的区别
- CountDownLatch只能用一次,CyclicBarrier可以使用reset()方法重置。
- …
Semaphore
用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。
semapthore依赖于AbstractQueuedSynchronizer实现的同步器。可以用来做流量控制。1
2
3
4
5
6Semaphore s = new Semaphore(10);
s.acquire();
...
...
s.release();
实例
1 | public class SemaphoreTest { |
Exchanger
用于线程间的数据交换。它提供一个同步点,两个线程可以交换彼此数据。
1 | import java.util.concurrent.Exchanger; |