Synchronized实现原理
Synchronized原理总结
- Synchronized用的锁,每个对象天生都带着一个对象监视器,存在Java对象头中的Mark Word字段,Monitor是在操作系统底层实现的,本质上依赖操作系统的Metlx Lock,Mutelx Lock的切换需要从用户态到内核态,非常耗时。
- 申明方法和代码块,效果不一样
- 锁对象:具体对象、类对象
Java对象头结构
锁升级过程
无锁、偏向锁、轻量级锁、重量级锁
不同锁的特点
偏向锁:当只有一个线程访问同步代码时,加锁解锁不需要执行额外的消耗,当发生竞争时,有撤销的消耗。
轻量级锁:竞争线程不会阻塞,自旋会消耗CPU,响应时间快。适合执行时间短的任务。
重量级锁:获取不到锁的线程阻塞,响应时间变长,但吞吐量提高。