ReentrantLock为什么默认是非公平模式?在Java中,除了ReentrantLock以外,synchronized也是重入锁。ReentrantLock中主要定义了三个内部类:Sync、NonfairSync、FairSync。默认构造方法使用的是非公平锁;第二个构造方法可以自己决定使用公平锁还是非公平锁;上面我们分析了ReentrantLock的主要结构,下面我们跟着几个主要方法来看源码。tryLock()方法比较简单,直接以非公平的模式去尝试获取一次锁,获取到了或者锁本来就是当前线程占有着就返回true,否则返回false。tryLock方法在阻塞的时候加上阻塞时间,并且会随时检查是否到期,只要到期了没获取到锁就返回false。释放锁的过程大致为:将state的值减1;如果state减到了0,说明已经完全释放锁了,唤醒下一个等待着的节点;为什么ReentrantLock默认采用的是非公平模式?

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁

ReentrantLock源码详解--公平锁、非公平锁