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

深入解析 ReentrantLock:原理、公平锁与非公平锁的较量

ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。

ReentrantLock 实现原理

基本架构

ReentrantLock 主要依赖于 AbstractQueuedSynchronizer(简称 AQS)来实现锁的同步机制。AQS 是一个用于构建锁和同步器的框架,它使用一个 int 类型的状态变量 state 来表示锁的状态,同时维护一个 FIFO(先进先出)的双向队列,用于存储等待获取锁的线程。

可重入性的实现

可重入性是指同一个线程可以多次获取同一把锁而不会被阻塞。ReentrantLock 通过 AQS 的 state 变量来记录线程获取锁的次数。

  • 当一个线程第一次获取锁时,state 会从 0 变为 1,同时记录当前持有锁的线程。
  • 如果该线程再次获取同一把锁,state 的值会相应地增加(例如变为 2、3 等),表示重入次数。
  • 每次释放锁时,state 的值会减 1,直到 state 变为 0 时,锁才真正被释放,其他线程才可以竞争该锁。
    以下是 ReentrantLock 可重入性的简单示例代码:
import java.util.concurrent.locks.ReentrantLock;public class ReentrantLockExample {private final ReentrantLock lock = new ReentrantLock();public void method1() {lock.lock();try {System.out.println("Method 1: Lock acquired");method2();} finally {lock.unlock();}}public void method2() {lock.lock();try {System.out.println("Method 2: Lock acquired");} finally {
http://www.xdnf.cn/news/952201.html

相关文章:

  • DreamO字节开源图像编辑框架
  • IDC智能机房整体解决方案
  • 华为云Flexus+DeepSeek征文|基于华为云一键部署Dify平台,接入DeepSeek大模型,构建数据可视化助手应用实战指南
  • ubuntu22.04 安装docker 和docker-compose
  • windows系统MySQL安装文档
  • 【深度学习新浪潮】什么是credit assignment problem?
  • 编程工具点亮效率之光
  • 九、MySQL执行原理
  • OPenCV CUDA模块光流处理------利用Nvidia GPU的硬件加速能力来计算光流类cv::cuda::NvidiaHWOpticalFlow
  • 【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
  • MAZANOKE结合内网穿透技术实现跨地域图像优化服务的远程访问过程
  • 零基础设计模式——行为型模式 - 命令模式
  • 使用地球观测数据优化云到 GPU 的吞吐量以进行深度学习
  • rm视觉学习1-自瞄部分
  • 使用python进行图像处理—图像标识与NumPy(3)
  • 【PDF识别改名】PDF指定区域OCR识别重命名工具使用教程和注意事项
  • 前缀和题目:寻找数组的中心下标
  • NoSQL 之 Redis 集群
  • JS红宝书笔记 10.6 - 10.10 函数
  • 树莓派超全系列教程文档--(60)树莓派摄像头操作命令及使用其一
  • Cyber Weekly #59
  • 如何在网页里填写 PDF 表格?
  • MyBatis中关于缓存的理解
  • Spring Framework 6:核心升级特性
  • 2023赣州旅游投资集团
  • OptiStruct结构分析与工程应用:传递路径贡献量分析(TPA)
  • 接口 RESTful 中的超媒体:REST 架构的灵魂驱动
  • 数据集分享 | MOT17数据集、UAVDT数据集
  • qt 双缓冲案例对比
  • 面试高频问题