美文网首页
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

    JDK中实现锁的主要方式有两种: 1. Synchronized :Synchronized是非公平的 2. Re...

  • 多线程之ReentrantLock源码剖析

    剖析ReentrantLock非公平锁和公平锁的源码 ReentrantLock和synchronized一样是可...

  • 高并发编程基础2

    1、ReentrantLock默认为非公平锁,可以设置为公平锁。synchronized为非公平锁。 公平锁,就是...

  • JUC源码走读

    一、公平锁和非公平锁 非公平锁的源码: 可以看到非公平锁的lock,上来就先尝试获取锁。compareAndSet...

  • Reentrantlock

    Reentrantlock是jdk提供的可重入锁的实现,它分为非公平锁和公平锁。公平锁是那个线程等待锁时间最长,那...

  • synchronized和juc比较

    为什么有了synchronized之后还需要juc的锁呢? 1、synchronized是非公平锁,无法用作公平锁...

  • 聊聊Java中的那些锁

    说到Java中锁的分类,有很多种。本文就来聊聊公平锁、非公平锁、可重入锁、独占锁、共享锁和自旋锁。 一、公平锁和非...

  • 公平锁和非公平锁-ReentrantLock是如何实现公平、非公

    1、什么是公平锁与非公平锁 公平锁:公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。非公平锁:非...

  • 公平锁和非公平锁 源码

    ReentrantLock 提供了公平锁和非公平锁,只需要在构造方法中使用一个 boolean 参数即可。默认非公...

  • 入门AQS锁 - ReadLock与WriteLock

    WriteLock(写入锁)。: 写入锁是一个可重入的,默认非公平的独占锁。关于独占锁的概念介绍请参考Reen...

网友评论

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

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