当前位置: 首页 > article >正文

ReentrantLock 的实现原理

ReentrantLock

ReentrantLock 是一种可重入的排它锁,主要用来解决多线程对共享资源竞争的问题。它的核心特性有几个:

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

ReentrantLock 的实现原理

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


http://www.kler.cn/a/106716.html

相关文章:

  • 先进制造aps专题二十七 西门子opcenter aps架构分析
  • linux 安装PrometheusAlert配置钉钉告警
  • Chapter5.4 Loading and saving model weights in PyTorch
  • uni-app vue3 常用页面 组合式api方式
  • postgres数据库中_varchar的数组存储方法如何查找
  • 基于本地消息表实现分布式事务
  • 【OpenCV实现图像的几何变换】
  • 5G与无人驾驶:引领未来交通的新潮流
  • MySQL - Heap 表是什么?
  • mysql源码安装
  • 求分数序列和(c++题解)
  • Go基础——数组、切片、集合
  • C++之lambda匿名函数总结(二百四十五)
  • 【ARM 嵌入式 C 入门及渐进 10 -- 冒泡排序 选择排序 插入排序 快速排序 归并排序 堆排序 比较介绍】
  • Mysql,SqlServer,Oracle获取库名 表名 列名
  • 配置VUE环境过程中 npm报错的处理方案以及VUE环境搭建过程
  • 线扫相机DALSA--采集卡Base模式设置
  • 工控安全与网络安全有什么不同?
  • 在Win11上部署ChatGLM2-6B详细步骤--(上)准备工作
  • 算法通关村第三关-白银挑战双指针思想
  • 操作系统缓冲区管理(单缓冲,双缓冲,循环缓冲,缓冲池)
  • SpringMVC(四)域对象共享数据
  • Django 全局配置 settings 详解
  • 730. 机器人跳跃问题--二分
  • 【报错】java.sql.SQLException: Invalid utf8mb3 character string: ‘ACED00‘
  • Fourier分析导论——第1章——Fourier分析的起源(E.M. Stein R. Shakarchi)