Java中线程同步辅助类
2019-02-16·Java, Concurrency, AQS
CountDownLatch
线程同步辅助类,用于某些线程工作前先完成某些动作,或某些线程工作完成后进行收尾工作。
countDown():计数器减一await():当 count 为 0 时,等待的线程被释放
CountDownLatch cdl = new CountDownLatch(3);
// 汇总线程等待
cdl.await();
// 工作线程完成后 countDown
cdl.countDown();
CyclicBarrier
允许一组线程相互等待,直至到达公共屏障点。CyclicBarrier 可被重用。
CyclicBarrier barrier = new CyclicBarrier(parties);
// 所有线程在此等待
barrier.await();
Semaphore
信号量,控制同时访问的线程个数。
acquire():获取信号量,count 减一release():释放信号量,count 加一
Semaphore semaphore = new Semaphore(3);
semaphore.acquire();
// 业务操作
semaphore.release();
AQS (AbstractQueuedSynchronizer)
构建锁和同步器的框架,底层采用模板方法模式。使用一个 int 成员变量表示同步状态,通过内置 FIFO 队列完成排队工作。
核心思想:如果被请求的共享资源空闲,则将当前线程设置为有效的工作线程,并将资源锁定。如果资源被占用,则将线程加入 CLH 队列。
继承 AQS 需覆盖的方法:
tryAcquire(int)tryRelease(int)tryAcquireShared(int)tryReleaseShared(int)isHeldExclusively()
#Java#Concurrency#AQS