1.什么是AQS?

  • AQS是JDK1.5提供的一个基于FIFO等待队列实现的一个用于实现同步器的基础框架,这个基础框架的重要性可以这么说,JCU包里面几乎所有的有关锁、多线程并发以及线程同步器等重要组件的实现都是基于AQS这个框架。AQS的核心思想是基于volatile int state这样的一个属性同时配合Unsafe工具对其原子性的操作来实现对当前锁的状态进行修改。当state的值为0的时候,标识改Lock不被任何线程所占有。

2.什么是ReentrantLock

  • 1.ReentrantLock是可重入锁,什么是可重入锁呢?可重入锁就是当前持有该锁的线程能够多次获取该锁,无需等待。可重入锁是如何实现的呢?这要从ReentrantLock的一个内部类Sync的父类说起,Sync的父类是AbstractQueuedSynchronizer(后面简称AQS),ReentrantLock、ReentrantReadWriteLock、CountDownLatch、CyclicBarrier、Semaphore,都是通过继承AQS抽象类,加入自己的特定逻辑、实现自己特有的功能。
    ReentrantLock-method.png
  • 2.ReentrantLock内部提供了两种AQS的实现,一种公平模式,一种是非公平模式,如果没有特别指定在构造器中,默认是非公平的模式
//非公平模式
public ReentrantLock() {
    sync = new NonfairSync();
}

3.总结

Last modification:November 2nd, 2020 at 11:47 am
如果觉得我的文章对你有用,请随意赞赏