基础--吊打面试官--精通synchronized底层实现原理

本文深入探讨了synchronized关键字的工作原理,包括其如何基于JVM内置锁实现同步,并详细讲解了监视器锁的具体实现机制及优化过程。此外还介绍了轻量级锁与重量级锁的区别,以及CAS操作的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理比较好的理解方式:

一篇就够,synchronized原理详解_小派师兄的博客-优快云博客_synchronized原理

理解:

synchronized是一个锁,基于jvm内置锁实现,在字节码文件中通过monitor对象,基于进入与退出Monitor对象实现方法与代码块同步。具体情况,如果monitor进入数为0,线程可以进入,然后将monitor设置为1;如果该线程已经占有monitor,则进入数+1;如果没有占有,该线程阻塞等待,不断尝试获取,直到为0的时候获取成功。
监视器锁的实现依赖底层操作系统的Mutex lock(互斥锁)实现。

面试阐述:

1.说理解。

2.说锁对象,对象头上的2个机器码值的变更。

1.0之前太慢,重,jdk1.0后修改,变得轻.修改的原理是:以前是涉及到用户态和内核态的交互,现在是用户态实现。

基本概念理解:

用户态和内核态的概念:程序的不同级别。内核态级别更高,理解是操作权限更高,更贴近系统。

重量级:用户态到内核态申请;内核态再返回结果给用户态。

轻量级:都是在用户态实现的。

cas概念:是一种自偏锁,更是一种乐观锁的概念。当前值0;计算结果值1;会去看内存值是不是0,如果是,把1去更新内存值;2)如果发现,内存值是8,会重新读取一次,读到8,再计算计算结果得到9,再放入内存;

特殊场景cas中遇到ABA问题,即:有线程把数据从0改为8,又改回到0,和原来保持了一致;对于这种情况,加版本号去记录有过修改。

现在syn的实现是:先轻量级实现,不能实现,再重量级解决。

cas最终的原理:java层面,追踪到native方法上;追踪到c语言上,经过几层追寻,发现最后用的是lock cmpxchg(cmpxchg=cas修改变量值)

以Object对象为例子,对象的布局分为几个部分:

1)第一部分,叫markword,包含了锁信息,hashcode,gc信息;8bit

2)第二部分,是glasspoint,对象类型,4bit

3)成员变量

4)padding,为排列为8的倍数,空出来的部分

synchonized的优化:

视频去哪了呢?_哔哩哔哩_bilibili

############################################

双重检查锁(Dcl:double check lock:比如某个变量要安全操作,锁之前之后都要进行检查)要不要

happens-before原则,指定了重排序必须遵守的原则

volatile的解释   优快云

最佳参考文章:

谈谈 JVM 内部锁升级过程 - 知乎

参考视频:

视频去哪了呢?_哔哩哔哩_bilibili

面试题

synchronized和volatile的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值