偏向锁的定义

顾名思义,偏向锁会偏向第一个访问锁的线程。

如果在接下来的运行过程中,该锁没有被其他线程访问,这持有偏向锁的线程将永远不需要同步

如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会尝试消除他身上的偏向锁,将锁恢复到标准的轻量级锁(CAS),也就是说,偏向锁,只在单线程环境下起作用

当锁对象第一次被线程获取的时候,虚拟机会将该对象头部的mardword中的标示位设置为01,即偏向模式。将该线程的id存在markword中,成功之后,持有该锁的线程以后就不再进行任何同步操作,但是在另外一个线程尝试获该锁的时候,这个偏向模式宣告结束

偏向锁针对的场景

偏向锁是为了针对“大多数情况下,锁不仅不存在多线程竞争,而且总由同一个线程获取”的情况

这是为了对那些历史遗留的Collectionn类如Vector和HashTable等类做的优化。

偏向锁的问题

偏向锁撤销的代价很大,需要进入safepoint,如果是竞争十分激烈的多线程程序,一开始就关掉偏向锁是一个比较好的选择

safepoint:safepoin是一个安全点,所有线程执行到安全点的时候就会去检查,是否需要执行safepoint操作,如果需要执行,那么所有线程就会的等待,直到所有线程进入到safepoint。

紧接上面说的问题,撤销偏向锁的时候需要所有线程都阻塞等到进入safepoint,这种开销无疑是巨大的,尤其是在锁竞争激烈的多线程程序中,偏向锁会影响到程序的运行效率,这也是为什么在jdk15中,已经默认关闭了偏向锁模式

最新文章

  1. Ajax发送异步请求(四步操作)
  2. (int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别
  3. 【即时通讯】XMPP调试与简单使用
  4. ios9和ios10的新特性
  5. ASP.NET 尖括号 百分号 井号 等号 的用法
  6. 关于ref与out的区别
  7. 【竞品分析】Android音乐播放器的竞品分析
  8. 用Global.asax实现伪静态.
  9. java中final的意义
  10. 使用jersey 注解包扫描类PackageNamesScanner
  11. C#小爬虫,通过URL进行模拟发送接收数据
  12. js canvas游戏初级demo-上下左右移动
  13. Centos7下使用Ceph-deploy快速部署Ceph分布式存储-操作记录
  14. MongoDB的安装和使用
  15. Django 执行单独脚本及SyntaxError缩进报错解决
  16. 利用max-height适应多尺寸屏幕的下拉动画
  17. JS实现控制HTML5背景音乐播放暂停
  18. xx.hbm.xml中相关重要的配置
  19. springBoot打包发布项目------jar包
  20. TStringList 复制 赋值。

热门文章

  1. Spring Cloud Gateway夺命连环10问?
  2. Educational Codeforces Round 114 (Rated for Div. 2)题解
  3. Docker+nginx搭建tomcat集群
  4. Jenkins MultiJob
  5. Mysql教程:(一)数据库常用基础命令
  6. Spring Cloud Alibaba 使用Seata解决分布式事务
  7. uni-app app端设置全屏背景色
  8. 什么?还在用delete删除数据《死磕MySQL系列 九》
  9. 大爽Python入门教程 1-4 习题
  10. 未能加载文件或程序集“Microsoft.CodeDom.Providers.DotNetCompilerPlatform