锁升级

原因:为了减少获得锁和释放锁带来的性能消耗,所以有了升级锁

流程:
无锁状态—偏向锁(jvm配置是否开启)----轻量级锁----重量级锁(不可逆,只要成为重量级,释放锁就一直是重量级)

常见锁

  • 偏向锁:首先进入的线程,就被标记为偏向锁。如果有其他线程竞争。偏向锁就会升级为轻量级锁

  • 轻量级锁:等待的进程不进入阻塞队列,自旋状态(消耗cpu,实现就是CAS),一直在查看是否有空位。当线程激烈(自旋线程多)就会升级为重量级锁
    速度快,但消耗大

  • 重量级锁:等待的进程进入阻塞队列,通知有空位,出阻塞队列争抢位置(需要维护阻塞队列)会引起上下文切换 速度在相对较慢 消耗减小

  • 乐观锁(CAS):每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。
    cas操作需要输入两个值,一个旧值,一个是新值,操作期间先比较旧值有没有变化,没有变化更新新值,放生变化不交换

  • 悲观锁 :synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。

  • 对象锁 : 所有方法加锁 就是在对象上加锁 只有执行完一个才能执行别的 (面试点)不加锁的方法没影响(只要有一个方法没加锁 就不是对象锁) 对象锁只能影响同一对象的 new两对象就没影响

  • 静态锁(类锁 在锁前加static): 只有前一个释放才能执行下一个 静态锁能影响静态锁 只有锁相同才能互相影响 必须锁方法 锁住变量不是整个类锁

并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)相关推荐

  1. 12.synchronized的锁重入、锁消除、锁升级原理?无锁、偏向锁、轻量级锁、自旋、重量级锁

    小陈:呼叫老王...... 老王:来了来了,小陈你准备好了吗?今天我们来讲synchronized的锁重入.锁优化.和锁升级的原理 小陈:早就准备好了,我现在都等不及了 老王:那就好,那我们废话不多说 ...

  2. 偏向锁、轻量级锁、重量级锁加锁过程即锁升级膨胀过程

    偏向锁.轻量级锁.重量级锁加锁过程即锁升级膨胀过程 synchronized 偏向锁 为什么要引入偏向锁 偏向锁加锁过程 线程获取到锁对象的偏向锁之后,执行完同步代码块之后,会释放这个偏向锁吗 使用了 ...

  3. java——无锁、偏向锁、轻量级锁、重量级锁的synchronize锁升级笔记

    本章所需基础知识: 懂得多线程和锁的基础知识就行 或者看完我上一篇的<java多进程和多线程简单复习(不涉及原理)>就可以了 如果没基础建议别看 推荐视频: B站马士兵老师的视频:无锁.偏 ...

  4. Synchronized锁升级:无锁-> 偏向锁 -> 轻量级锁 -> 重量级锁

    一. 概述 1. Synchronized锁升级的原因 用锁能够实现数据的安全性,但是会带来性能下降.无锁能够基于线程并行提升程序性能,但是会带来安全性下降. 2. Synchronized锁升级的过 ...

  5. 锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)

    文章目录 Synchronized锁升级的背景 Synchronized的性能变化 Java5之前,用户态和内核态之间的切换 为什么每个对象都可以称为一把锁? Java6开始优化Synchronize ...

  6. JUC-9.“锁”事(显式锁与隐式锁/悲观锁与乐观锁/公平锁与非公平锁/可重入锁/读写锁(独占/共享/降级)/邮戳锁/死锁)、锁升级

    目录 一.悲观锁与乐观锁 1.1 悲观锁 1.2 乐观锁 二.公平锁与非公平锁 2.1 为什么会有公平锁/非公平锁的设计为什么默认非公平? 2.2 如何选择使用哪种锁? 三.可重入锁(又名递归锁) 3 ...

  7. synchronized 字节码层原理解析及锁升级

    作为Java程序员可能使用synchronized的频次不是很多大部分时间都是在crud,但是作为一个技术人还是要有点追求的,本篇文章想写了好久在此之前需要了解Java运行时数据区.Java字节码与字 ...

  8. Java 锁相关知识汇总及锁升级

    Java 锁相关知识汇总及锁升级 锁的基础知识 什么是Synchronized 锁的四种状态 类相关信息 32位虚拟机对象头 64位虚拟机对象头 CAS 锁消除 锁粗化 Lock Record 偏向锁 ...

  9. Java的锁机制--偏向锁、轻量锁、自旋锁、重量锁

    基础知识 线程切换代价 Java的线程是映射到操作系统的原生线程之上的,如果阻塞或唤醒一个线程就需要操作系统介入,需要在用户态和内核态之间切换,该切换会消耗大量的系统资源,因为用户态和内核态均有各自专 ...

  10. 一、Synchronized详解与锁升级

    一.synchronized 1.共享问题 1.共享问题:在多线程的环境下,由于多个公共资源可能会被多个线程共享,也就是多个线程可能会操作(增.删.改等)同一资源.当多个线程操作同一资源时,很容易导致 ...

最新文章

  1. live2d模型_使用二次元模型动画人物让自己网站“骚起来”
  2. 哪一类功率放大电路效率最高_最简单逆变器电路讲解计算,电工电子动手学技术,电路好案例推荐...
  3. CSDN中Markdown编辑器的数学公式编写(非常详细!)
  4. 【Tools】MarkDown教程(七)-Typora详细教程
  5. ASP.NET Core中借助CSRedis实现安全高效的分布式锁
  6. ECCV 2020最佳论文讲了什么?作者为ImageNet一作、李飞飞高徒
  7. 【英语学习】【WOTD】gullible 释义/词源/示例
  8. 矩池云conda创建指定cuda cudnn tf版本的虚拟环境
  9. VS C++ sprintf 格式
  10. K210车牌归属地识别[获取图像+训练+识别效果演示]
  11. Windows 服务监控工具
  12. 通过rustlings源码了解rust如何从命令行参数里面获取值的方式
  13. 《C程序设计语言》笔记 第6章 结构
  14. android 屏幕密度160与320换算,Android 屏幕密度与尺寸
  15. Node.js之 express写后端接口
  16. NSWOJ-zlh找男朋友(水题)
  17. SOLIDWORKS怎么把STEP曲面转换成实体
  18. linux下通过bin文件来制作img镜像文件
  19. java 自定义注解实现不同对象之间的拷贝(支持大小写、驼峰转换)
  20. 【亚马逊运营】如何以Acos为基准进行数据分析?

热门文章

  1. Eclips IDE安装Python
  2. geany怎么编写python_Geany怎么使用,Geany安装使用教程
  3. 无线耳机哪个品牌好?四大国内蓝牙耳机品牌排行
  4. Python 网易云音乐 MV 下载
  5. python 答题插件_大话西游答题器 Python版本
  6. 微信小程序调用update更新数据库数据无效
  7. window屏幕录制
  8. 尚融宝28-投资列表展示
  9. JavaScript面试题大全之基础面试题(附答案)
  10. html页面打印插件,分享8款网站开发中最好用的打印页面插件