ReentrantLock中 lock.lock(),加锁源码分析
- lock方法
- ReentrantLock类中的静态内部类中的Sync继承AQS,调用Sync内部的抽象方法lock();
- 查看关于lock()实现的非公平锁和公平锁方法
- 非公平锁会比公平锁多出一步基于CAS获取锁资源,获取不到才执行和公平锁一样的逻辑
公平锁和非公平锁一样的处理逻辑acquire()方法分析
public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt(); }
- 基于这个方法,公平与非公平锁有各自的实现
- 非公平锁的实现
- 公平锁的实现
- 公平锁中hasQueuedPredecessors()方法分析查看是否有线程在双向队列中排队
公平锁中的addWaiter()方法分析
- 公平锁acquireQueued()方法分析
- 对shouldParkAfterFailedAcquire()的作用是当前线程没有获取到锁资源,或者没有资格获取锁资源,该线程节点能不能被挂起