美文网首页
JDK 公平锁非公平锁源码解析Synchronized和Reen

JDK 公平锁非公平锁源码解析Synchronized和Reen

作者: lixiaodong037 | 来源:发表于2019-09-29 07:50 被阅读0次

    JDK中实现锁的主要方式有两种:

        1. Synchronized :Synchronized是非公平的

        2. ReentrantLock:有公平和非公平两种实现方式

    锁的公平与不公平:公平锁是指线程获得锁的顺序按照fifo的原则,先排队的先得。非公平锁指每个线程都先要竞争锁,不管排队先后,所以后到的线程有可能无需进入等待队列直接竞争到锁。非公平锁虽然可能导致某些线程饥饿,但是锁的吞吐率是公平锁好几倍,synchronized是一个典型的非公平锁方案,而且没法做成公平锁。

    本篇文章重点分析ReentrantLock的公平非公平两种实现方式,本文源码基于JDK1.8.0_151

    ReentrantLock中的公平非公平锁主要实现在下图中的FairSync和NonfairSync中,默认构造函数是非公平的实现方式

    非公平在ReentrantLock中主要在NonfairSync中实现,

    公平锁在ReentrantLock中主要在FairSync中实现,见tryAcquire()方法

    参考文章:synchronized、锁、多线程同步的原理是咋样的 https://www.jianshu.com/p/5dbb07c8d5d5

    相关文章

      网友评论

          本文标题:JDK 公平锁非公平锁源码解析Synchronized和Reen

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