AQS抽象队列同步器 - 检验你的学习成果
AQS中的state变量使用volatile关键字修饰,确保了多线程环境下的可见性。volatile保证了一个线程对state的修改能够立即被其他线程看到。
AQS使用模板方法模式,定义了同步器的骨架算法,而具体的同步语义由子类实现。AQS提供了acquire、release等模板方法,子类实现tryAcquire、tryRelease等具体方法。
SIGNAL状态表示当前节点的后继节点需要被唤醒。当一个节点释放同步状态时,如果其waitStatus为SIGNAL,就需要唤醒其后继节点。
CountDownLatch使用共享模式,多个线程可以同时等待计数器归零。而ReentrantLock、写锁、Mutex都是独占模式,同一时刻只能有一个线程获取。
在实现独占模式的同步器时,必须重写tryAcquire()和tryRelease()方法。acquire()、addWaiter()、unparkSuccessor()等都是AQS提供的模板方法,不需要子类实现。