Java偏向锁(Biased Locking)是Java 6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能。

轻量级锁也是一种多线程优化,它与偏向锁的区别在于,轻量级锁是通过CAS来避免进入开销较大的互斥操作,而偏向锁是在无竞争场景下完全消除同步,连CAS也不执行(CAS本身仍旧是一种操作系统同步原语,始终要在JVM与OS之间来回,有一定的开销)。

所谓的无竞争场景,举个例子,就是单线程访问带同步的资源或方法。

偏向锁实现原理

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

如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。
如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会尝试消除它身上的偏向锁,将锁恢复到标准的轻量级锁。(偏向锁只能在单线程下起作用)。

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

加深阅读;

  深入JVM锁机制1-synchronized

  深入JVM锁机制2-Lock

最新文章

  1. 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常
  2. AnyCAD.NET C#开发CAD软件实践(一)
  3. fir.im Weekly - 除了写代码,还需要了解什么
  4. C语言 复杂的栈(链表栈)
  5. 安装qmake与环境变量解析
  6. 神奇的Noip模拟试题第一试 合理种植 枚举+技巧
  7. Codeforces Round #215 (Div. 2) B. Sereja and Suffixes map
  8. 三大文本处理工具grep、sed及awk的简单介绍
  9. C#程序设计基础——变量
  10. 再不升级你就Out了 Windows8.1安装实录
  11. Java提高篇(三二)-----List总结
  12. HTML中<input>參数,以及文本输入框,文本域的解说
  13. bigdata_spark_源码修改_本地环境搭建_eclise
  14. [iOS] 响应式编程开发-ReactiveCocoa(二)
  15. python - bilibili(四)抓包数据乱码
  16. bzoj 4199: [Noi2015]品酒大会
  17. 【动态规划】洛谷P1006传纸条
  18. iowait 过高问题的查找及解决linux
  19. flask 第四章 偏函数 Local空间转时间 myLocalStack RunFlask+request 请求上下文
  20. SpringBoot2.0+ DataSourceInitializer不生效的问题

热门文章

  1. Yii2.0中文开发向导——删除数据
  2. crt连接vitualbox中centos虚拟机
  3. JQuery 限制文本框只能输入数字和小数点
  4. cnzz广告管家使用心得
  5. Qt中QFtp获取带有中文的文件名称出现乱码的解决方法(执行操作前就转换编码)
  6. Microsoft SQL Server 混合云博客系列
  7. 动态链接库dll,静态链接库lib, 导入库lib
  8. Happy Matt Friends(dp)
  9. GLSL中的各种变量总结
  10. [python网络编程]DNSserver