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

synchronized的实现原理


程序员的公众号:源1024获取更多资料,无加密无套路!

最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上


synchronized 

synchronized 是 JVM 的内置锁,基于 Monitor 机制实现。每一个对象都有一个与之关联的监视器 (Monitor),这个监视器充当了一种互斥锁的角色。当一个线程想要访问某个对象的 synchronized 代码块,首先需要获取该对象的 Monitor。如果该 Monitor 已经被其他线程持有,则当前线程将会被阻塞,直至 Monitor 变为可用状态。当线程完成 synchronized 块的代码执行后,它会释放 Monitor,并把 Monitor 返还给对象池,这样其他线程才能获取 Monitor 并进入 synchronized 代码块。

作用

 synchronized也叫同步锁,解决的是多个线程之间对资源的访问一致性。换句话说,就是保证在同一时刻,被synchronized修饰的方法或代码块只有一个线程在执行,其他线程必须等待,解决并发安全问题。

原理

  1. synchronized的实现是基于对象内部的锁(也称为监视器锁),每个锁关联着一个对象实例。

  2. 当synchronized作用于对象时,它就会尝试获取这个对象的锁,如果锁没有被其他线程占用,则当前线程获取到锁,并可以执行同步代码块;如果锁已经被其他线程占用,那么当前线程就会阻塞在同步块之外,直到获取到锁才能进入同步块。

  3. synchronized还支持作用于类上,此时它锁住的是整个类,而不是类的某个实例。在这种情况下,由于只有一个锁存在,所以所有使用该类的线程都需要等待锁的释放。

  4. 在JVM内部,每个Java对象都有头信息,其中包含了对象的一些元信息和状态标志。synchronized通过修改头信息的状态标志来实现锁的获取和释放。

  5. synchronized还支持可重入性,即在同一个线程中可以多次获取同一个锁,这样可以避免死锁问题。

  6. Java虚拟机会通过锁升级的方式来提升synchronized的效率,比如偏向锁、轻量级锁和重量级锁等机制,使得在竞争不激烈的情况下,synchronized的性能可以达到与非同步代码相当的水平。

 系列文章索引

MyBatis的插件能在哪些地方进行拦截?

了解MyBatis的缓存机制吗

面试官:谈谈对volatile的理解

Spring中用到了哪些设计模式

面试官:说一下SQL的执行过程

线程池的工作原理


 


http://www.kler.cn/news/155461.html

相关文章:

  • Docker常用进本命令【必备基本功】
  • nodejs基于vue的社区物业缴费报修管理系统7vwc6
  • fasterxml 注解组装实体
  • 【车载开发系列】Flash支持的安全功能
  • C语言面试之旅:掌握基础,探索深度(面试实战之c语言指针数组下篇)
  • 2023年【G1工业锅炉司炉】考试试题及G1工业锅炉司炉模拟考试题库
  • 第八天:信息打点-系统端口CDN负载均衡防火墙
  • STM32踩坑--串口发送乱码
  • 什么是Ros(三)- 常用工具简介
  • 【Erlang进阶学习】2、匿名函数
  • 使用OssImport 工具将文件上传到阿里云OSS
  • 最大乘积分解(动态规划)
  • QNX时钟调研
  • 华容道求解可视化工具
  • QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能
  • 怎么检测电脑电源?电脑电源检测系统软件如何助力?
  • 文案二次创作软件,文案二次创作的软件
  • 【Python】tensorflow学习的个人纪录(3)
  • 力扣每日一题day26[42. 接雨水]
  • 游泳馆会员服务预约管理系统预约小程序效果如何
  • TypeScript 的安装与使用
  • python每日一题——21搜索二维矩阵
  • JVM——内存溢出和内存泄漏
  • 【知识】稀疏矩阵是否比密集矩阵更高效?
  • python动态圣诞下雪图
  • vue-历史模式部署
  • 【面试HOT200】回溯篇
  • Node.js版本管理工具NVM(Node Version Manager)的使用
  • leetcode - 矩阵区域和
  • 第十五届蓝桥杯模拟赛(第二期)