我们上一篇简单介绍了AQS这个技术点,这一篇我们从ReentrantLock这个锁的角度来分析A Q S ,帮助大家理解
从源码开始
首先,我们先看一下ReentrantLock的内部的抽象类Sync,这个是继承于AQS的,重写了其中的一些方法,我 们会在下面源码中解析,继续往下看,记住这个Sync
我们知道这个锁可以实现公平锁和非公平锁,我们来看下是如何实现的
上面的是非公平锁,下面的是公平锁,默认的是非公平锁,我们看下非公平锁的实现是先通过CAS的方式 去加锁,加锁成功之后就将当前线程设置为活跃的持有锁的线程
1 /**
2 * The current owner of exclusive mode synchronization.
3 */
4 private transient Thread exclusiveOwnerThread;
失败的话会执行acquire方法,OK,这里我们再看下公平锁FairSync的lock方法的实现,这个公平锁没有 像上面非公平锁那样判断,而是直接调用了acquire方法
这里大家应该也懂了非公平锁和公平锁的真正区别了吧,就是非公平锁的时候,线程来的时候会多一次直 接尝试加锁,剩下的操作就是一样了
OK,让我们进去acquire方法看
看一下try Acquire方法