synchronized总结
2021-12-23 15:29:33 2 举报
AI智能生成
synchronized总结
作者其他创作
大纲/内容
简介
作用范围
锁分类
对象锁
方法锁
类锁
锁升级[JDK1.6]
对象内存布局
对象头结构
Mark Word
Klass Point
Monitor
EntryList(阻塞队列【BLOCKED】)
Owner(指向持有Monitor对象的线程)
WaitSet(等待队列【WAITING】)
实例数据
对其填充
膨胀过程
特性保证
线程通信
JMM
锁的内存语义
有序性
as-if-serial
happens-before
可见性
内存强制刷新
原子性
单一线程持有
可重入性
计数器
Object
wait
程序计数器
notify
和Lock的区别
- synchronized是关键字,是JVM层面的底层啥都帮我们做了,而Lock是一个接口,是JDK层面的有丰富的API
- synchronized会自动释放锁,而Lock必须手动释放锁。
- synchronized是不可中断的,Lock可以中断也可以不中断。
- synchronized能锁住方法和代码块,而Lock只能锁住代码块。
- synchronized是非公平锁,ReentrantLock可以控制是否是公平锁。
- Lock可以知道线程有没有拿到锁,而synchronized不能。
底层原理
同步代码块
monitorenter
monitorexit
同步方法
ACC_SYNCHRONIZED
JVM对synchronized的优化[JDK 1.6]
偏向锁
轻量级锁
重量级锁
对象实例
对象头Mark word
无锁状态
偏向锁
轻量级锁
重量级锁
实例变量class metadata address
填充数据array Length
自旋锁:竞争失败的时候,不是马上转化级别,而是执行几次空循环
锁消除
JIT在编译的时候把不必要的锁去掉
0 条评论
下一页