synchronized中重量级锁偏向锁和轻量级锁的区别
Java1.5之前synchronized是一个重量级锁,Java 1.6对synchronized进行的各种优化后,synchronized并不会显得那么重了。我们先介绍重量级锁,然后介绍优化后的轻量级锁和偏向锁。
1、对象头以及Mark Word
1重量级锁
重量级的synchronized有三个用法:
普通同步方法,锁的是当前实例对象。
静态同步方法,锁的是当前类的class对象。
同步代码块,锁的是synchronized括号里配置的对象。
上述这三种机制的切换是根据竞争激烈程度进行的:
在几乎无竞争的条件下, 会使用偏向锁
在轻度竞争的条件下, 会由偏向锁升级为轻量级锁
在重度竞争的情况下,会由轻量级锁升级为重量级锁。1.1普通同步方法用法及原理
用法: public class SynchronizedMethod { public synchronized void method() { System.out.println("Hello World!"); } }
方法调用如下图所示:
1.当前线程调用指令将会调用当前实例对象,去检查当前实例对象(在堆中)所对应的类方法(在方法区中)方法表中的访问标志(ACC_SYNCHRONIZED)是否被设置;
2.如果设置了,那么检查此同步对象有没有被锁定,即检查它的Mark Word的锁标志位是不是01,则虚拟机首先在当前线程的栈中创建我们称之为"锁记录(Lock Record)"的空间,用于存储锁对象的Mark Word的拷贝,官方把这个拷贝称为Displaced Mark Word。
3.执行线程将通过Displaced Mark Word中指向重量级锁的指针,找到Monitor对象的起始地址,获取到monitor对象,获取成功之后才能执行方法体,方法执行完后再释放monitor。在方法执行期间,其他任何线程都无法再获得同一个monitor对象。1.2同步代码块用法及原理
用法: public static class SynchronizedMethod { public synchronized void method() { System.out.println("Hello World!"); } }
在类中如果某方法或某代码块中有 synchronized,那么在生成一个该类实例后,该实例也就有一个单独的Monitor对象,而static synchronized则是所有该类的所有实例公用得一个Monitor对象。 2偏向锁
大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,偏向锁可以降低多次加锁解锁的开销。
偏向锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他的线程获取,则持有偏向锁的线程将永远不需要同步。大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。
当有另外一个线程去尝试获取这个锁时,偏向模式就宣告结束。根据锁对象目前是否处于被锁定的状态,撤销偏向后恢复到未锁定或轻量级锁定状态。
3轻量级锁
4总结
synchronized的执行过程:
1. 检测Mark Word里面是不是当前线程的ID,如果是,表示当前线程处于偏向锁
2. 如果不是,则使用CAS将当前线程的ID替换Mard Word,如果成功则表示当前线程获得偏向锁,置偏向标志位1
3. 如果失败,则说明发生竞争,撤销偏向锁,进而升级为轻量级锁。
4. 当前线程使用CAS将对象头的Mark Word替换为锁记录指针,如果成功,当前线程获得锁
5. 如果失败,表示其他线程竞争锁,当前线程便尝试使用自旋来获取锁。
6. 如果自旋成功则依然处于轻量级状态。
7. 如果自旋失败,则升级为重量级锁。
上面几种锁都是JVM自己内部实现,当我们执行synchronized同步块的时候jvm会根据启用的锁和当前线程的争用情况,决定如何执行同步操作;
在所有的锁都启用的情况下线程进入临界区时会先去获取偏向锁,如果已经存在偏向锁了,则会尝试获取轻量级锁,启用自旋锁,如果自旋也没有获取到锁,则使用重量级锁,没有获取到锁的线程阻塞挂起,直到持有锁的线程执行完同步块唤醒他们;
偏向锁是在无锁争用的情况下使用的,也就是同步开在当前线程没有执行完之前,没有其它线程会执行该同步块,一旦有了第二个线程的争用,偏向锁就会升级为轻量级锁,如果轻量级锁自旋到达阈值后,没有获取到锁,就会升级为重量级锁;
如果线程争用激烈,那么应该禁用偏向锁。
氨氮高于总氮是什么鬼?总氮包含了氨氮,理论上总氮应该高于氨氮才对。但总会遇到一些不按常理出牌的情况,有时候测量同一份水样结果发现氨氮高于总氮。01氨氮和总氮是怎么测的?实验室里测量特定物质含量一般用分光
14nm14nm7nm,麒麟回归?华为回话了对于手机圈来说,一直都有个痛点,那必然是麒麟处理器的消失。你可以嫌华为卖的贵,但不能嫌华为菜,就光这芯片研发技术,华为之后,还真没有国产厂商能拿出手的。当然了,已经有消息称OPPO
比特币在2023年击败了沃伦巴菲特的加密赌注比特币在2023年的反弹也让Coinbase的股票今年迄今涨幅超过100,提振了CathieWood的ARK投资组合。2023年,比特币(BTC)和CathieWood的Coinb
gRPC与SpringBoot集成1。gRPCSpringBoot选型gRPC官方并未提供gRPCSpringBoot的相关代码库,在github中搜索grpcspringboot,最受欢迎的代码库如下图选择第一个
大脑一定是越用越聪明吗?感悟生命,享受自然!大家好,欢迎来到属于你的百科大世界!今天我们围绕的主角就是与我们息息相关的大脑。经科学家研究,我们人类的大脑皮层大约有140亿个神经脑细胞,而经常运用的脑细胞只
试试chatgpt4。0解小学方程能不能解对GPT4。0在解方程方面表现得相当糟糕,让许多用户对其智能水平产生质疑。尽管它拥有庞大的知识库和强大的计算能力,但在解决复杂的数学问题时,仍然无法达到人们的期望。实际上,有些简单的
全程1790公里,沿途都是美景的豪华旅游专列,还可以洗澡导语平时大家都有坐过火车吧!在上面可以上厕所吃东西睡觉等等。但是能够洗澡的火车有听说过吗?相信大部分人还是不知道的,因为真的太少见了。接下来笔者就给大家好好的介绍一下,这个比高铁还
珠海国际会展中心再获中国最具竞争力国际会展中心奖项近日,由中国会展经济研究会主办的第十四届中国会议产业大会在北京举行。珠海国际会展中心作为受邀重点企业之一,于现场集中展示了珠海会展助力产业第一的综合实践经验,并与业界伙伴分享了珠海
唱山歌采茶忙,炒茶香品佳肴!梅州清凉山上非遗跨界碰撞阳春三月,清凉山新茶吐绿,又到春茶采摘季。在清凉山往下俯瞰,层层云海,垄垄翠绿,茶田藏身于云雾之中,与采茶妹构成一幅美丽画卷。3月17日上午,梅江区非遗赋能乡村振兴西阳清凉山茶制作
靠螺蛳粉出名的小城,竟然有这么多惊喜2023年初的旅游市场可谓是神仙打架各地都拿出了杀手锏,打算大显神通在如此激烈的竞争下有这样一座城市杀出重围,成为了当之无愧的黑马它就是柳州各处人山人海,被挤得水泄不通连柳州本地人
4月6日起恢复!三年来首次!2023年3月16日深圳航空无锡大阪航班已开放销售这是近三年来首次复飞该航班从4月6日开始每周四执行一班。无锡大阪航班号ZH8073,无锡起飞时刻0800,抵达大阪时刻1110(当