一、概述
我们通过ReentrantLock的示例,分析了AQS的独占功能。本节将以CountDownLatch为例,分析AQS的共享功能。
CountDownLatch是一个辅助同步器类,用来作计数使用,它的作用有点类似于生活中的倒数计数器,先设定一个计数初始值,当计数降到0时,将会触发一些事件,如火箭的倒数计时。
初始计数值在构造CountDownLatch对象时传入,每调用一次 countDown() 方法,计数值就会减1。
线程可以调用CountDownLatch的await方法进入阻塞,当计数值降到0时,所有之前调用await阻塞的线程都会释放。
我们以CountDownLatch示例,假设现在有3个线程,ThreadA、ThreadB、mainThread,CountDownLatch初始计数为1:
CountDownLatch switcher = new CountDownLatch(1);
线程的调用时序如下:
//ThreadA调用await()方法等待
//ThreadB调用await()方法等待
//主线程main调用countDown()放行
二、AQS共享功能的原理
1、创建CountDownLatch
CountDownLatch的创建没什么特殊,调用唯一的构造器,传入一个初始计数值,内部实例化一个AQS子类:CountDownLatch switcher = new CountDownLatch(1);
public