从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是一个很重量级的锁了。优化机制包括自适应锁、自旋锁、锁消除、锁粗化、轻量级锁和偏向锁。

锁的状态从低到高依次为自旋锁->偏向锁->轻量级锁->重量级锁,升级的过程就是从低到高,降级在一定条件也是有可能发生的。
自旋锁:由于大部分时候,锁被占用的时间很短,共享变量的锁定时间也很短,所有没有必要挂起线程,用户态和内核态的来回上下文切换严重影响性能。自旋旋的概念就是让线程执行一个忙循环,可以理解为就是啥也不干,防止从用户态转为内核态,自旋锁可以通过设置-XX:+UseSpining来开启,自旋的默认次数是10次,可以使用-XX:PreBlockSpin设置。
自适应锁:自适应锁就是自适应的自旋锁,自旋的时间不是固定时间,而是由前一次在同一个锁上的自旋时间和锁的持有者状态来决定。
锁消除:锁消除指的是JVM检测到⼀些同步的代码块,完全不存在数据竞争的场景,也就是不需要加锁,就会进行锁消除。
锁粗化:锁粗化指的是有很多操作都是对同一个对象进行加锁,就会把锁的同步范围扩展到整个操作序
列之外。
偏向锁:当线程访问同步块获取锁时,会在对象头和栈帧中的锁记录里存储偏向锁的线程ID,之后这个线程再次进⼊同步块时都不需要CAS来加锁和解锁了,偏向锁会永远偏向第一个获得锁的线程,如果后续没有其他线程获得过这个锁,持有锁的线程就永远不需要进⾏同步,反之,当有其他线程竞争偏向锁
时,持有偏向锁的线程就会释放偏向锁。可以设置-XX:+UseBiasedLocking开启偏向锁。
轻量级锁:JVM的对象的对象头中包含有一些锁的标志位,代码进入同步块的时候,JVM将会使用CAS方式来尝试获取锁,如果更新成功则会把对象头中的状态位标记为轻量级锁,如果更新失败,当前线程就尝试自旋来获得锁。
简单点说,偏向锁就是通过对象头的偏向线程ID来对比,甚至都不需要CAS了,轻量级锁主要就是通过CAS修改对象头锁记录和自旋来实现,重量级锁则是除了拥有锁的线程其他全部阻塞。

spring 锁机制相关推荐

  1. mysql三锁,mysql锁机制之表锁(三)

    顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作.表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张表,sql语句可以通过执行计划 ...

  2. 数据库事务及锁机制介绍

    2019独角兽企业重金招聘Python工程师标准>>> 事务介绍 因为一直使用Spring这种声明式的事务管理,一直以为事务的主要作用是对一个业务方法中多次执行数据库操作的最终提交. ...

  3. Spring 事务机制详解

    Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考. Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无 ...

  4. 秒杀设计--mysql的锁机制应用和redis方案

    2019独角兽企业重金招聘Python工程师标准>>> 背景 在工作中接到一个需求:对于访问页面的前x名用户分发A奖品,x+1名及以后的用户分发另外一种奖品.在J2EE的开发中,我们 ...

  5. mysql insert into select大量数据插入比较慢_史上最全MySQL锁机制

    本文主要记录学习MyISAM 和 InnoDB 这两个存储引擎. 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的 ...

  6. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  7. 面试必会系列 - 1.5 Java 锁机制

    本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes 面试必会系列专栏:https://blog.csdn.net/sinat_424833 ...

  8. mysql的事务与锁机制

    文章目录 1. 事务及其ACID属性 2. 事务并发带来的问题 3. 事务隔离级别 ①:读未提交 ②:读已提交 ③:可重复读 ④:串行化 4. mysql的锁机制 ①:锁分类 ②:mysql不同操作的 ...

  9. 史上最全MySQL锁机制

    本文主要记录学习MyISAM 和 InnoDB 这两个存储引擎. 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的 ...

最新文章

  1. MySQL 5.5.35 单机多实例配置详解
  2. Nature:1000种植物的测序揭示10亿年来的进化
  3. centos 6.5安装mysql5.7,centos6.5安装mysql5.7
  4. python发送qq邮件列表_Python SMTP发送邮件
  5. python爬取行业数据_用Python进行Web爬取数据
  6. 笨方法“学习python笔记之函数
  7. 读《大学之路》有感②
  8. 動態設定GridView的列寬
  9. Android设备间通信(wifi连接)
  10. [洛谷P3621] [APIO2007] 风铃
  11. python-学生管理系统--6 搜索功能模块
  12. LOJ2361「NOIP2016」组合数问题
  13. Java多线程电影院_java 多线程-快乐订座电影院
  14. Activiti7修改内部缓存为redis
  15. Linux之奇怪的知识---supervisor超级守护进程的意义和使用方法
  16. VS编程,WPF控件增加图片背景的一种方法
  17. 2015.4.28 今天开博客了
  18. how to define the RASIC in a team
  19. 09 JAVA如何将字符串反转?
  20. java毕业设计员工绩效考核系统分析与设计Mybatis+系统+数据库+调试部署

热门文章

  1. 二进制、八进制、十进制、十六进制间相互转换
  2. pdf如何转成ppt,最详细的教程!
  3. 半波对称振子方向图_Matlab画平行二元半波振子阵立体方向图
  4. Hulu新剧预告|女版乔布斯上演《辍学生》
  5. Excel 处理技巧 (二)
  6. Bobi‘s Blog个人博客
  7. 权益质押(Staking):这是关于什么的?
  8. 数理统计与统计软件测试卷,概率论与数理统计模拟试卷3及答案.doc
  9. 为什么微信QQ故障会被定为一级事故?
  10. agios天河二号安装实践