前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中的偏向锁

Java中的偏向锁

作者头像
吉林乌拉
发布2019-08-14 17:44:45
4920
发布2019-08-14 17:44:45
举报
文章被收录于专栏:吉林乌拉

偏向锁和轻量级锁一样也是在JDK 1.6中新增的一种锁,它的目的是为了解决数据在无竞争的时候把同步语句去掉,进一步提高程序的运行性能。在上一篇中使我们知道轻量级锁是在无数据竞争的时,使用CAS操作去去掉同步的。那么在偏向锁中就是在无数据竞争时把整个同步都去掉,连CAS操作都不需要做了。偏向锁实际的本质是就是偏向第一个获得它的线程,当这个线程在执行时,如果该锁没有被其他的线程获取,则持有偏向锁的线程将一直不需要进行同步。下面我们看一下在线程获取偏向锁时,Mark Word都会有哪些变化。

当线程第一次获取锁时,虚拟机会把Mark Word中的标志位修改为01,即偏向模式。同时用CAS操作把获取到这个锁的线程记录在对象的Mark Word之中。如果CAS操作成功,那么持有偏向锁的线程每次在执行同步代码块时,虚拟机都不会进行任何同步操作。也就是不会调用同步相关的字节码指令等。当有其它线程尝试去获取这个锁时,偏向模式也就结束了。下图为偏向锁和轻量级锁转化时对象Mark Word等信息的变化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档