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

2017-04-04  本文已影响0人  他们叫我小白

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

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

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

这里又调用了公平锁的tryAcquire

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读