一个工作了3年的粉丝私信我,在面试的时候遇到了这样一个问题。

”请说一下ReentrantLock的实现原理“,他当时根据自己的理解零零散散的说了一些。

但是似乎没有说到关键点上,让我出一期说一下回答思路。

好吧,关于这个问题,我们来看看普通人和高手的回答。

普通人:

ReentrantLock的一个实现原理,他是一种重入锁然后也是一种重入的一个排它锁。

它会去解决我们在多个线程的并行去访问某一些共享资源的时候,我就可以通过ReentrantLock去加锁。

实现原理就是通过AQS来实现锁的一个叫线程的一个同步的,他的核心是AQS。

高手:

好的,面试官,关于这个问题,我会从这几个方面来回答。

  • 什么是ReentrantLock
  • ReentrantLock的特性
  • ReentrantLock的实现原理

首先,ReentrantLock是一种可重入的排它锁,主要用来解决多线程对共享资源竞争的问题。

它的核心特性有几个:

  1. 它支持可重入,也就是获得锁的线程在释放锁之前再次去竞争同一把锁的时候,不需要加锁就可以直接访问。
  2. 它支持公平和非公平特性
  3. 它提供了阻塞竞争锁和非阻塞竞争锁的两种方法,分别是lock()和tryLock()。

然后,ReentrantLock的底层实现有几个非常关键的技术。

  1. 锁的竞争,ReentrantLock是通过互斥变量,使用CAS机制来实现的。
  2. 没有竞争到锁的线程,使用了AbstractQueuedSynchronizer这样一个队列同步器来存储,底层是通过双向链表来实现的。当锁被释放之后,会从AQS队列里面的头部唤醒下一个等待锁的线程。
  3. 公平和非公平的特性,主要是体现在竞争锁的时候,是否需要判断AQS队列存在等待中的线程。
  4. 最后,关于锁的重入特性,在AQS里面有一个成员变量来保存当前获得锁的线程,当同一个线程下次再来竞争锁的时候,就不会去走锁竞争的逻辑,而是直接增加重入次数。

以上就是我对这个问题的理解。

总结

这道题很简单,但是要回答好,有两个关键点。

  1. 大家必须要理解ReentrantLock的整个设计思想
  2. 表达一定要清晰有条理

还是那句话,虽然基础,但很重要。地基的深度决定了楼层的高度。

如果有任何面试问题、职业发展问题、学习问题,都可以私信我。

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构

如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

【Java面试】请说一下ReentrantLock的实现原理?的更多相关文章

  1. java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析

    java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java ...

  2. 轻松学习java可重入锁(ReentrantLock)的实现原理

    转载自https://blog.csdn.net/yanyan19880509/article/details/52345422,(做了一些补充) 前言 相信学过java的人都知道 synchroni ...

  3. 轻松学习java可重入锁(ReentrantLock)的实现原理(转 图解)

    前言 相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么 ...

  4. Java面试必问之Hashmap底层实现原理(JDK1.7)

    1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? ...

  5. 【Java面试】RDB 和 AOF 的实现原理、优缺点

    Hi,大家好,我是Mic. 一个工作了5年的粉丝私信我,最近面试碰到很多Redis相关的问题. 其中一个面试官问他Redis里面的持久化机制,没有回答得很好. 希望我帮他系统回答一下. 关于Redis ...

  6. Java面试必问通信框架NIO,原理详解

    NIO 流与块 通道与缓冲区 缓冲区状态变量 文件 NIO 实例 选择器 套接字 NIO 实例 内存映射文件 NIO与IO对比 Path Files NIO 新的输入/输出 (NIO) 库是在 JDK ...

  7. Java面试必问之Hashmap底层实现原理(JDK1.8)

    1. 前言 上一篇从源码方面了解了JDK1.7中Hashmap的实现原理,可以看到其源码相对还是比较简单的.本篇笔者和大家一起学习下JDK1.8下Hashmap的实现.JDK1.8中对Hashmap做 ...

  8. Java面试宝典

    相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消 ...

  9. Java 面试宝典-2017

    http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017   Java面试宝典2017版 一. Java基础部分........... ...

随机推荐

  1. 使用vue-cli构建工具构建vue项目时候组件的使用

    <template> <div class="contains"> <!-- <div class="main"> & ...

  2. C++ functional库中的仿函数

    一.仿函数简介 仿函数(functor)又称之为函数对象(function object),实际上就是 重载了()操作符 的 struct或class. 由于重载了()操作符,所以使用他的时候就像在调 ...

  3. drf视图类总结

    ![image](https://img2022.cnblogs.com/blog/2608149/202204/2608149-20220401194236430-447848842.png)

  4. 虚拟机VMware的安装与Xshell的应用

    先安装VMware 1.安装就按照提示一点点安装就行了 配置网络 打开VMware 这里的IOS映像文件在https://developer.aliyun.com/mirror/里下载 这里用方向键往 ...

  5. css 实现图片专场

    <template> <div> </div> </template> <style lang="scss"> html ...

  6. ElasticSearch 设置某个字段不分词

    先说结论:字段类型更改为 'keyword' elasticSearch官方文档中创建index代码如下 PUT /my_store { "mappings" : { " ...

  7. 最新MATLAB R2021b超详细安装教程(附完整安装文件)

    摘要:本文详细介绍Matlab R2021b的安装步骤,为方便安装这里提供了完整安装文件的百度网盘下载链接供大家使用.从文件下载到证书安装本文都给出了每个步骤的截图,按照图示进行即可轻松完成安装使用. ...

  8. C++ atomic 和 memory ordering 笔记

    如果不使用任何同步机制(例如 mutex 或 atomic),在多线程中读写同一个变量,那么,程序的结果是难以预料的.简单来说,编译器以及 CPU 的一些行为,会影响到程序的执行结果: 即使是简单的语 ...

  9. 菜B的初来乍到。

    1.简单自我介绍 031702220:我是默默无闻的黄恒杰:我的爱好是健身:我最喜欢紫荆园的青椒炒肉:薛之谦的<其实>:苦心人天不负,三千越甲可吞吴. 2.阅读与思考 (1)回想一下你初入 ...

  10. mybatis添加代码出现是第几条数据