并发编程(六)ReentrantLock

简介: 并发编程(六)ReentrantLock

Java并发编程核心在于java.concurrent.util

juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQSAQS定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器。

AQS具备特性

  • 阻塞等待队列
  • 共享/独占
  • 公平/非公平
  • 可重入
  • 允许中断

ReentrantLock

ReentrantLock定义了一个内部类Sync继承了AQS,通过这种方式将同步器所有调用都映射到Sync对应的方法,同时ReentrantLock也具备AQS的特性。ReentrantLock具备以下特性

  • 阻塞等待队列
  • 独占
  • 公平/非公平
  • 可重入
  • 允许中断

ReentrantLock继承关系

ReentrantLock里面定义了三个内部类SyncFairSyncNonfairSyncFairSyncNonfairSync表示公平锁与非公平锁,通过这两个内部类实现公平与非公平的机制,具体关系如下图:

Lock.png

FairSyncNonfairSync是通过继承Sync实现的,其中FairSync加锁机制为先判断列队中是否有其它线程正在等待加锁,如果有则直接入队,没有才会尝试加锁;而NonfairSync加锁机制为先进行尝试加锁,加锁失败才进行入队。

除此之外,ReentrantLock还可通过lockInterruptibly()加锁时可使用Thread.interrupt()进行中断加锁过程。

ReentrantLock加锁过程(简述)

ReentrantLock加锁详细过程

公平锁加锁过程

  1. 查看队列中是否有其它线程等待加锁
  2. 队列为空或者等待加锁的线程为当前线程,尝试CAS加锁
  3. 加锁成功 state+1,结束
  4. 加锁失败(只发生在队列为空的情况),或者队列不为空且等待加锁的线程非当前线程,进行入队。
  5. 入队完毕,将前驱结点信号量(waitStatus)改为-1,阻塞等待LockSupport.park(this)

解锁过程

  1. 解锁state-1
  2. 判断state==0(可重入锁,每次加锁state都会+1,释放锁次数必须等于加锁次数才算已解锁)
  3. 判断队列中是否有等待加锁的线程
  4. 将线程唤醒LockSupport.unpark(thread)

ReentrantLocksynchronized比较

  1. 加锁机制比较
  • ReentrantLock,基于AQS实现的锁,需要手动加锁解锁,细粒度和灵活度更高
  • synchronizedJVM内部锁,JVM会自动加锁与解锁
  1. 底层原理比较
  • 都是依赖底层操作系统的Mutex lock(互斥锁)实现
  1. 锁类型比较
  • synchronized是一种可重入的非公平锁
  • ReentrantLock是基于AQS实现,具体特性上文已有说明
  1. 性能比较(未实测)
  • 在并发量小时,synchronized性能更高一些
  • 并发量高时,synchronized性能将会下降(升级为重量级锁),而ReentrantLock基本不变。

我这里的理解是,synchronizedReentrantLock底层阻塞原理虽然是一样的,而ReentrantLock利用CAS自旋操作实现锁,能够有效避免线程从用户态到内核态的频繁切换。

目录
相关文章
|
SQL 分布式计算 大数据
大数据Spark框架概述
大数据Spark框架概述
1036 0
|
前端开发
【前端图表】echarts散点图鼠标划过散点显示信息
【前端图表】echarts散点图鼠标划过散点显示信息
417 0
|
2月前
|
人工智能 运维 安全
云原生 - AI Native 多智能体数字人架构实践
我们以云原生应用部门为试验田,用商业化产品 AgentTeams 落地一支"数字员工小分队",让它们承接日常研发、工单答疑、开源维护与运营等业务,把原本人肉串联的协作流程,做成 AI Native 的工作方式。
440 0
|
3月前
阿里云无影云电脑个人版——无影灵豆详解、费率、灵豆包购买及抵扣规则全解析
无影灵豆是阿里云无影云电脑个人版专属计费单位,衡量云电脑/云游戏每小时资源消耗量(如经济模式4豆/小时,电竞模式60豆/小时),支持按需购买灵豆包,优先抵扣套餐内额度,过期作废。阿里云无影云电脑官方链接:https://t.aliyun.com/U/Qlbmzx
387 2
|
4月前
|
机器学习/深度学习 数据采集 人工智能
AI重塑金融——风控、量化与智能体的革命
金融行业一直是AI技术应用的前沿阵地。从2024年到2026年,AI在金融领域的渗透从“锦上添花”走向“核心驱动”,从“辅助工具”升级为“自主决策者”
532 1
|
7月前
|
人工智能 搜索推荐 API
智能体来了:从0-1开启你的AI分身时代
内容摘要:AI智能体(Agent)正从概念走向大规模应用,宣告了个体效率飞跃的“AI分身时代”至。本文深度拆解智能体底层逻辑,手把手教你如何利用Coze、Dify等平台构建具备感知、规划与执行能力的AI分身,助你实现从基础自动化到全时生产力的转型。
1253 3
|
JavaScript 前端开发 Shell
我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
415 17
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
893 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
存储 监控 虚拟化
Hyper-V一硬盘数据备份法
在Hyper-V环境中,备份单硬盘虚拟机对保障业务连续性和数据安全至关重要。常用方法包括:使用Hyper-V管理器导出虚拟机,简单直观但效率较低;借助Windows Server Backup实现自动化备份,内置系统功能无需额外软件;采用专业备份软件(如Veeam Backup & Replication),提供多种备份类型和监控功能,稳定性更佳但需付费;创建快照快速恢复特定状态,不过依赖父磁盘且过多影响性能;手动复制文件无需工具但易出错。推荐优先选择专业备份软件或Windows Server Backup以确保可靠性与效率,快照适合作为临时补充手段。