JDK8的RentrantLock源码学习--公平锁

上一篇学习了非公平锁,本节来看看公平锁的实现

公平锁在创建对象时候需要添加一个参数,true

lock方法此时调用的是公平锁的lock方法,然后内部又调用了acquire()方法

这里又调用了公平锁的tryAcquire

这里与非公平锁的唯一区别是在获取锁的时候首先调用的是hasQueuedPredecessors(),而非公平锁这里调用的则是后面的CAS尝试去修改状态。这也就是上文中说的公平与非公平锁的区别体现在这里。

这个方法很简单,就是看现在有没有等待线程的node链条,如果没有则体现在头和尾不相等,且头的下一个node节点null或者不为null时候下一个节点的线程不是当前线程,此时候才回去尝试获取锁

其他的方法与非公平锁是一致的,请看我的上一篇文章

JDK8的RentrantLock源码学习--非公平锁:http://www.jianshu.com/p/b1dee032856e

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容