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

多线程---synchronized特性+原理

文章目录

  • synchronized特性
  • synchronized原理
    • 锁升级/锁膨胀
    • 锁消除
    • 锁粗化

synchronized特性

  • 互斥

    当某个线程执行到某个对象的synchronized中时,其他线程如果也执行到同一个对象的synchronized就会阻塞等待。

    进入synchronized修饰的代码块相当于加锁
    退出synchronized修饰的代码块相当于解锁

  • 刷新内存

    synchronized的工作过程:
    1.获得互斥锁
    2.从主内存拷贝变量的最新版本到工作内存
    3.执行代码
    4.将更改后的变量值刷新到主内存
    5.释放互斥锁

  • 可重入

    同一把锁,连续加锁两次,不会导致死锁,那么它就是可重入的。

synchronized原理

锁升级/锁膨胀

在这里插入图片描述

解释:
synchronized更多的考虑到降低程序员的使用负担,内部就实现了“自适应”的操作。这个“自适应”的操作就是“锁升级/锁膨胀”
如果当前程序中,锁竞争不激烈,则以轻量级锁的状态来工作。可以第一时间拿到锁。
如果当前程序中,锁竞争很激烈,则以重量级锁的状态来工作。减少CPU的开销。

偏向锁是什么呢?
在这里插入图片描述

锁消除

由JVM自动判断,如果它发现某个地方的代码不需要加锁,但是你写了synchronized,它就会自动把锁给去掉。

比如:多个线程修改多个不同的变量时,你对它们分别加锁

注: JVM只有在100%确定这处代码的加锁可以去掉时才会执行锁消除操作,就算有1%的可能这儿不能去掉也不会锁消除。

锁粗化

锁的粒度,就是指:synchronized包含的代码块里代码的多少
粒度粗:包含的代码多
粒度细:包含的代码少

锁粗化,就是:把粒度细的锁合并为粒度粗的锁。这样可以减少加锁和解锁的开销。
在这里插入图片描述

注:

  1. 对同一个对象的加锁才能进行锁粗化
  2. 锁粗化要保证粗化前和粗化后,代码的逻辑不变
http://www.lryc.cn/news/212417.html

相关文章:

  • Qt实现卡牌对对碰游戏
  • 【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割7(数据预处理)
  • 极米科技H6 Pro 4K、H6 4K高亮定焦版——开启家用投影4K普及时代
  • 软考系统架构师知识点集锦九:数据库系统
  • IOC课程整理-6 Spring IoC 依赖注入
  • FANUC机器人PRIO-621和PRIO-622设备和控制器没有运行故障处理
  • 《动手深度学习》线性回归简洁实现实例
  • 国家数据局正式揭牌,数据专业融合型人才迎来发展良机
  • 基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】
  • 3.AUTOSAR OS分析(一)
  • AB试验(七)利用Python模拟A/B试验
  • Go语言入门-流程控制语句
  • 深入探究ASEMI肖特基二极管MBR60100PT的材质
  • python类模拟“对战游戏”
  • Maven第二章:Maven基本概念与生命周期
  • <蓝桥杯软件赛>零基础备赛20周--第3周--填空题
  • 【Linux】VM及WindowsServer安装
  • 【实用教程】MySQL内置函数
  • 第十二节——ref
  • 少儿编程 2023年9月中国电子学会图形化编程等级考试Scratch编程四级真题解析(判断题)
  • 【设计模式三原则】
  • 600MW发电机组继电保护自动装置的整定计算及仿真
  • 【蓝桥每日一题]-字符串(保姆级教程 篇1)#atcoder324C~E题
  • 4.2.1 SQL语句、索引、视图、存储过程
  • 1992-2021年全国各地级市经过矫正的夜间灯光数据(GNLD、VIIRS)
  • 机器人的触发条件有什么区别,如何巧妙的使用
  • 【Qt6】QStringList
  • 代码随想录算法训练营第五十三天|309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费
  • 厚黑学笔记
  • IDEA MyBatisX插件介绍