Java面试题(十):ReentrantLock底层原理

本文详细探讨了Java中的可重入锁ReentrantLock,包括其避免堵塞和提高效率的优势,以及获取锁成功的机制。通过对ReentrantLock源码的分析,揭示了其依赖于AQS(AbstractQueuedSynchroizer)的底层原理,AQS通过双向链表实现线程等待队列。此外,对比了ReentrantLock与synchronized的区别,如可配置公平锁、可中断和可设置超时等特性。
摘要由CSDN通过智能技术生成

1. 可重入锁

ReentrantLock翻译过来其实就是可重入锁,那么什么是可重入锁?简单来说,就是一把锁重复使用。

  • 以下就是一个可重入锁的机制,lock1.lock()已经获取到了lock1对象的锁,那么while里的lock1.lock()可以自动备货区,一把锁重复使用。
  • 这样的好处是什么?
    答:避免堵塞,提高效率,我们接下来解释一下为什么有这两个好处。

避免堵塞:lock1.lock()获取lock1对象的锁,while1中的lock1.lock()也是尝试获取lock1对象的锁,但是lock1对象的锁已经在上面被获取了,所以这个程序会一直阻塞在这里,但是有了可重入锁,这里不再需要获取这个锁了,直接往下运行。
提高效率:拿一把锁,只要没有unlock释放,可以重复使用,不需要一直获取同一把锁。

在这里插入图片描述
但是记住,可重入锁机制针对的是同一把锁,也就是同一个对象的锁,下面这种和可重入锁的机制就没什么关系了
在这里插入图片描述

2. ReentrantLock源码分析

2.1. 获取锁成功

在这里插入图片描述
在这里插入图片描述
默认使用的是非公平锁,可以通过参数修改new ReentrantLock(true)
再往下执行
在这里插入图片描述
我们发现,lock的底层是用CAS实现的&

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若能绽放光丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值