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

synchronized底层实现是什么 lock底层是什么 有什么区别

Synchronized原理:Java 中的每个对象都有一个对象头,其中包含锁信息(Mark Word)。这个锁标志位可以记录对象的锁定状态、线程锁的HashCode、偏向锁和轻量级锁等信息。
1.偏向锁
当一个线程第一次获取对象锁时,会将对象头中的锁标志位设置为偏向锁状态,并记录获取锁的线程 ID。
如果同一个线程再次获取锁,偏向锁会直接让其获取,无需进行同步操作。
如果其他线程尝试获取同一个锁,偏向锁会升级为轻量级锁。
2.轻量级锁
使用 CAS 操作尝试获取锁。如果 CAS 操作成功,线程获取锁;如果失败,线程会不断重试(自旋)。
如果两个线程同时竞争同一个轻量级锁,轻量级锁会升级为重量级锁。
3.重量级锁
使用操作系统的互斥量(mutex)来实现锁的获取和释放。
重量级锁会导致线程阻塞和唤醒,开销较大。

Lock原理:Lock 是 Java 中的一种显式同步机制,提供比 synchronized 更加灵活的同步功能。Lock 的底层实现主要依赖于 AQS(AbstractQueuedSynchronizer)。
1.AQS(AbstractQueuedSynchronizer)
AQS 是一个用于构建锁和同步器的框架,它使用一个 FIFO(先进先出)队列来管理线程的获取和释放同步状态。
同步状态管理:AQS 使用一个 FIFO 队列来记录获取同步状态的线程。
获取同步状态:线程通过 CAS 操作尝试获取同步状态,如果获取失败,线程会被加入队列并阻塞。
释放同步状态:线程释放同步状态后,AQS 会唤醒队列中下一个线程。
2.ReentrantLock
ReentrantLock 是 Lock 接口的一个实现类,它支持可重入锁,并提供公平锁和非公平锁两种模式。
公平锁:线程按照请求的顺序获取锁。
非公平锁:线程可能在队列中插队,获取锁的顺序不一定按照请求的顺序。

http://www.sczhlp.com/news/885.html

相关文章:

  • iOS 性能监控 苹果手机后台运行与能耗采样实战指南
  • pygame小游戏打飞机_1展示窗口
  • 个人版Navicat17 Lite版本安装教程(附安装包)2025最新版详细图文安装教程
  • Fluent许可状态监控工具
  • 链上充值监听与自动划转资金流程实现 - fox
  • 如何缓解Petya和WannaCrypt等快速网络攻击 | MSRC博客
  • 基于Amazon Translate的深度学习教材自动翻译系统
  • AI视频自动剪辑大师 v5.0 绿色版
  • 文件完整性校验工具 CHK 5.51 绿色中文版
  • 2025年7月26日,工信部人才交流中心 CUUG - PGCP/PGCM认证考试完成!
  • 2025.7.28暑假集训第一次普及组训练总结
  • 入职—员工体验的关键时刻,看AI Agent如何将体验值、效率值双双拉满
  • 寻疗智慧 IOT 数字健康服务平台
  • 铭芯科技共享轮椅租赁系统
  • 新视角问诊通
  • 寻医问药小程序系统
  • c# ACME client
  • 「闲聊文」准大三的我,思前想后还是不搞java了 - crhl
  • xxx.app 已损坏,无法打开,你应该将它移到废纸篓/打不开 xxx,因为它来自身份不明的开发者解决方法
  • OI 数学定理(提高级)
  • 智慧在线医疗 APP
  • 阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件
  • 03_Wazuh安装和使用.md
  • 01_pfSense防火墙安装和使用文档
  • 通过 nginx 设置外部访问服务器视频
  • 告别堡垒机时代!某电力公司如何用CloudQuery解决2000+数据库的安全困局?
  • LIS笔记
  • CF2122G Tree Parking 题解
  • day25
  • 数据资产到底值不值钱 - 智慧园区