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

Java——》synchronized的原理

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】
    总结——》【Linux】
    总结——》【MongoDB】
    总结——》【Elasticsearch】

Java——》synchronized的原理

    snchronized是基于对象实现的(JVM——》Java对象内存模型),通过在对象头设置标记,达到了获取锁和释放锁的目的。


    synchronized 是由JVM实现的互斥同步的一种方式(Java——》synchronized互斥性)。查看被synchronized 修饰过的程序块编译后的字节码,会发现在编译前后被编译器生成了monitorentermonitorexit 两个字节码指令(Java——》synchronized编译)。

  1. 在虚拟机执行到monitorenter 指令时,首先要尝试获取对象的锁。如果这个对象没有锁定,或者当前线程已经拥有了这个对象的锁,把锁的计数器+1。如果获取对象失败了,那当前线程就要阻塞等待,直到对象锁被另外一个线程释放为止。
  2. 当虚拟机执行到monitorexit 指令时,将锁的计数器-1。 当计数器为0时,锁就被释放了。
http://www.lryc.cn/news/163018.html

相关文章:

  • CPU主频
  • PHP8中查询数组中指定元素-PHP8知识详解
  • 在Git中将本地分支推送到远程仓库
  • 【数据仓库基础(四)】数据仓库需求:基本需求和数据需求
  • C++类模板是一种通用的编程工具,可以创建可以适用于多种数据类型的类
  • Vite和Webpack如何使用CDN包
  • TOWE雷达光敏感应开关,让生活更智能、更安全
  • git:亲测体验rebase与merge
  • 深度神经网络之BiseNet
  • Ubantu终端常用命令、快捷键和基本操作
  • 9.5 校招 内推 面经
  • 计算机网络中的应用层和传输层(http/tcp)
  • 基于antd+vue2来实现一个简单的绘画流程图功能
  • 【小吉送书—第二期】阿里后端开发:抽象建模经典案例
  • 深度学习常用的Python库(核心库、可视化、NLP、计算机视觉、深度学习等)
  • Android菜单(上下文菜单)(选项菜单)
  • l8-d11 TCP连接管理与UDP协议
  • Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】
  • 商业航天进展迅速:中国航天科工三院成功完成电磁发射试验
  • MySQL和Oracle数据库引擎
  • CloudQuery X PolarDB:让数据库管理更简单
  • 机器学习开源工具BatteryML,一站式分析与预测电池性能
  • TypeScript:赋予JavaScript数据类型新的力量,提升编程效率!
  • LLMs之Baichuan 2:《Baichuan 2: Open Large-scale Language Models》翻译与解读
  • 听书网站模板源码 懒人书院网站源码 苹果cms手机听书网站模版源码 支持手机端
  • 算法 数据结构 斐波那契数列 递归实现斐波那契数列 斐波那契递归的优化 斐波那契数列递归求解 多路递归实现 斐波那契算法系列 数据结构(十一)
  • 【面试经典150 | 双指针】两数之和
  • 桥接模式简介
  • 零钱兑换00
  • JavaScipt中如何实现函数缓存?函数缓存有哪些场景?