Redisson实现了一整套JDK中ReentrantLock的功能,这里对比一下公平锁(Fair)实现的差异和核心的思想。
公平锁存在的意义是为了保证绝对的公平,但是有其弊端,这个在网上有很多相关的解释,就是说绝对的公平不一定是性能最高的,因此和它相对的还有非公平锁,但是费公平锁也有问题,会引发饥饿现象。具体解释也可参见https://blog.csdn.net/xxcupid/article/details/51908916
fair模式的带超时时间的tryLock(超时时间)
ReentrantLock
ReentrantLock实现公平锁依赖的是一个叫做hasQueuedPredecessors的方法,所有的加锁操作前都要先判断这个方法的返回值,
方法的注释写的很清楚:
检验是否有其他线程已经等待了更长时间,借此保证公平。此外,注释还写道: