mark一下,以前对synchronized的理解可以扔掉了

本文深入解析Java中的synchronized关键字和volatile变量的底层实现原理,包括锁升级机制、自旋锁和处理器缓存一致性机制。同时,阐述了synchronized的三种定义方式及其应用场景,帮助读者全面理解Java并发编程。

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

synchronized:

有三种定义
1:普通同步方法 锁是当前实例对象
2:静态同步方法 锁是当前实例的class对象
3:同步方法块 锁定的是括号内的对象

volitle :

1:处理器会对volitle对象的写操作增加 LOCK#,该操作将一个处理器缓存数据写入到内存,此时会暂时锁定数据总线
2:缓存写入到内存的操作会导致其他处理器的缓存失效 ,下次访问时会从内存读取 强行填充到处理器缓存

锁升级:

无锁(无操作)–>偏向锁(MarkWord)–>轻量级锁(MarkWord 自旋)–>重量级锁(MarkWord 阻塞)

1-偏向锁时(MarkWord)存储获取当前锁对象的线程ID
2-轻量级锁时复制(MarkWord) ,然后CAS替换(MarkWord),如果成功则获得锁 否则自旋(理解为 while-true)
3-自旋锁失效,状态升级为阻塞,所以线程等待CAS替换 (MarkWord) 成功则获得锁 ,其他线程阻塞。

关于synchronized的使用场景及互斥说明, 可参见
https://blog.youkuaiyun.com/u010842515/article/details/65443084
参考书籍:Java并发编程艺术(方腾飞等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值