java--偏向锁
2024-08-25 05:46:56
Java偏向锁(Biased Locking)是Java 6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能。
轻量级锁也是一种多线程优化,它与偏向锁的区别在于,轻量级锁是通过CAS来避免进入开销较大的互斥操作,而偏向锁是在无竞争场景下完全消除同步,连CAS也不执行(CAS本身仍旧是一种操作系统同步原语,始终要在JVM与OS之间来回,有一定的开销)。
所谓的无竞争场景,举个例子,就是单线程访问带同步的资源或方法。
偏向锁实现原理
偏向锁,顾名思义,它会偏向于第一个访问锁的线程。
如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。
如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会尝试消除它身上的偏向锁,将锁恢复到标准的轻量级锁。(偏向锁只能在单线程下起作用)。
当锁对象第一次被线程获取的时候,虚拟机会将该对象头部的mardword中的标志位设置为01,即偏向模式。将该线程的id 存在markword中,成功之后,持有该锁的线程以后就不在进行任何的同步操作。但是,在另外一个线程尝试获取该锁的时候,这种偏向模式宣告结束
。
加深阅读;
最新文章
- 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常
- AnyCAD.NET C#开发CAD软件实践(一)
- fir.im Weekly - 除了写代码,还需要了解什么
- C语言 复杂的栈(链表栈)
- 安装qmake与环境变量解析
- 神奇的Noip模拟试题第一试 合理种植 枚举+技巧
- Codeforces Round #215 (Div. 2) B. Sereja and Suffixes map
- 三大文本处理工具grep、sed及awk的简单介绍
- C#程序设计基础——变量
- 再不升级你就Out了 Windows8.1安装实录
- Java提高篇(三二)-----List总结
- HTML中&;lt;input&;gt;參数,以及文本输入框,文本域的解说
- bigdata_spark_源码修改_本地环境搭建_eclise
- [iOS] 响应式编程开发-ReactiveCocoa(二)
- python - bilibili(四)抓包数据乱码
- bzoj 4199: [Noi2015]品酒大会
- 【动态规划】洛谷P1006传纸条
- iowait 过高问题的查找及解决linux
- flask 第四章 偏函数 Local空间转时间 myLocalStack RunFlask+request 请求上下文
- SpringBoot2.0+ DataSourceInitializer不生效的问题