首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    话说 ReentrantLock

    ReentrantLock 一、 使用 1.1 简单使用 public class LockTest { // 新建锁 Lock lock = new ReentrantLock()...直到天荒地老 lock 的 tryLock 就像是一个渣男,轻轻尝试一下,不合适抓紧下一个 public class LockTest02 { // 新建锁 Lock lock = new ReentrantLock...lockInterruptibly 可以被中断 在异常捕获里捕获异常 然后做一些后置处理 public class LockTest03 { // 新建锁 Lock lock = new ReentrantLock...这样对于后边排队的是不公平的 所以称为不公平锁 在ReentrantLock的实现中,不要脸的小强会尝试好几次,最后都失败的话他才会去队尾排队 Lock可以实现公平锁:公平锁就是lock的时候会先去排队队列里边看看...如果没有自己去申请锁,如果有自己去排队,去检查有没有人排队的时候可能会出现不公平(地铁一个人一大步窜你前边了),进队列的时候也可能会出现不公平(地铁一个人一大步窜你前边了) Lock lock = new ReentrantLock

    33700

    ReentrantLock 源码浅析

    ReentrantLock 介绍 一个可重入的互斥锁,它具有与使用{synchronized}方法和语句访问的隐式监视器锁相同的基本行为和语义,但它具有可扩展的能力。...ReentrantLock使用的是AQS的排他锁模式,由于AQS除了排他锁模式还有共享锁模式,本文仅对ReentrantLock涉及到的排他锁模式部分的内容进行介绍,关于共享锁模式的部分会在 CountDownLatch...源码分析 初始化 初始化 ———— 公平锁: ReentrantLock lock = new ReentrantLock(true) 初始化 ———— 非公平锁: ReentrantLock lock...= new ReentrantLock() 或 ReentrantLock lock = new ReentrantLock(false) lock public void lock() {...本文主要围绕共享锁模式的介绍,就不对其进行展开了,关于排他锁的内容会在“ReentrantLock源码解析”一文中介绍。

    1.8K94

    AQS之ReentrantLock

    ReentrantLock公平锁和非公平锁 ReentrantLock是一个独占锁,基于AQS实现,如果有线程获取了锁,那么其他线程来获取该锁的时候会被阻塞,ReentrantLock有两种 方式,一种是公平锁...可通过构造函数设置ReentrantLock的公平与非公平锁,默认为公平锁 public ReentrantLock() { sync = new NonfairSync(); } 构造函数为...new FairSync() : new NonfairSync(); } ReentrantLock原理 ReentrantLock是基于AQS来实现的,其核心是对state的处理,关于state,...ReentrantLock使用 ReentrantLock只需要在需要同步的代码段进行加锁,需要用try来包裹代码,在finally里进行释放锁,关于它的其他方法,大家可以自行去看。...public class ReentrantLockTest { private final ReentrantLock lock = new ReentrantLock(); public

    22510

    JUC-ReentrantLock

    AQS 学习ReentrantLock就不得不知道AQS,因为ReentrantLock就是基于了AQS对象的 特点 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态...而共享模式可以允许多个线程访问资源 提供了基于 FIFO 的等待队列,类似于 Monitor 的 EntryList 条件变量来实现等待、唤醒机制,支持多个条件变量,类似于 Monitor 的 WaitSet ReentrantLock...如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住 条件变量 synchronized 中也有条件变量,就是我们讲原理时那个 waitSet 休息室,当条件不满足时进入 waitSet 等待 ReentrantLock...的条件变量比 synchronized 强大之处在于,它是支持多个条件变量的,这就好比 synchronized 是那些不满足条件的线程都在一间休息室等消息 而 ReentrantLock 支持多间休息室...,有专门等烟的休息室、专门等早餐的休息室、唤醒时也是按休息室来唤 醒 原理 非公平锁实现原理 加锁流程 先看构造器,默认为非公平锁 public ReentrantLock() {

    15520

    并发-ReentrantLock浅析

    2.为了减小这种系统开销,我们想要吧加锁的行为从系统级别移到类上,于是有了Lock, 第一种就是ReentrantLock.ReentrantLock被叫做重入锁,意思是线程可以进入任何 一个它已经拥有的锁所同步着的代码块...当然,这个代表了广义上的可重入,ReentrantLock只能说是其中一种。...ReentrantLock的内核是AbstractQueuedSynchronizer,底层实现是CAS,如果抢 占成功,逻辑是比较简单的,如图 ?...当然,ReentrantLock 还涉及到很多其他知识点,比如公平锁和非公平锁、等待队列 如果添加、内部类AQS的模板模式等等,在这里只是做个记录,要想完全弄清楚,还是挺不容易的,有兴趣的同学们可以看看它的源代码探究一下

    23320

    ReentrantLock 锁详解

    IDEA 注册码,2020.2 IDEA 激活码 ReentrantLock 锁详解 ReentrantLock 支持公平锁和非公平锁,可重入锁 ReentrantLock的底层是通过 **AQS[...【2】ReentrantLock 的核心是 AQS,那么它怎么来实现的,继承吗? 说说其类内部结构关系。 【3】ReentrantLock 是如何实现公平锁的?...【4】ReentrantLock 是如何实现非公平锁的? 【5】ReentrantLock 默认实现的是公平还是非公平锁? 【6】使用ReentrantLock 实现公平和非公平锁的示例?...八、AQS应用 ---- **ReentrantLock的可重入应用:**ReentrantLock的可重入性是 AQS很好的应用之一,在了解完上述知识点以后,我们很容易得知ReentrantLock实现可重入的方法...由于篇幅原因,本文仅介绍了可重入锁ReentrantLock的原理和AQS原理,希望能够成为大家了解AQS和ReentrantLock等同步器的“敲门砖”。

    51960
    领券