美文网首页
JDK8的RentrantLock源码学习--公平锁

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

作者: 他们叫我小白 | 来源:发表于2017-04-04 15:46 被阅读0次

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

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

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

    这里又调用了公平锁的tryAcquire

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

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

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

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

    相关文章

      网友评论

          本文标题:JDK8的RentrantLock源码学习--公平锁

          本文链接:https://www.haomeiwen.com/subject/smzaottx.html