synchronized底层实现
synchronized依赖cas
CAS、 Compare and swap 比较和替换
比较和替换
cas操作有三个参做(变量位置 期望的变量,新的值)
其中张三就是一个线程 卫生间的门上的锁就是此处的锁 卫生间就是众多线程要访问的对象
synchronized底层其实是一个锁升级的过程,
- 无锁:当没有线程访问一个对象的时候,此时是无锁状态,
- 偏向锁:当有一个线程访问这个对象的时候(将自己的线程id存到对象头markword里面),锁升级为偏向锁,或者自旋锁(卫生间坑位被占了,等的人在哪里急的转圈,看卫生间的锁是不是开了)
- 轻量锁:当有少量的线程在等待这个对象的使用,此时偏向锁升级为轻量锁
- 重量级锁:当有自旋次数超过10次,自选线程超过总cpu核数的一半,此时轻量锁升级为重量锁,jdk1.6后加入了自适应锁,jvm自己控制
硬件底层加入可lock指令,保证了原子操作