synchronized
JDK早期的 重量级 - OS
后来的改进中,产生锁升级的概念
sync(Object)
markword 记录这个线程的ID(偏向锁)
如果线程争用:升级为自旋锁
10次以后,
升级为重量级锁 - OS
CAS
在synchronized的优化过程中我们看到大量使用了CAS操作,CAS全称Compare And Set(或Compare And Swap),CAS包含三个操作数:内存位置(V)、原值(A)、新值(B)。
简单来说CAS操作就是一个虚拟机实现的原子操作,这个原子操作的功能就是将旧值(A)替换为新值(B),如果旧值(A)未被改变,则替换成功,如果旧值(A)已经被改变则替换失败。
总结
换行时间短(加锁代码),线程较少,用自旋
换行时间长,线程较多,用系统锁。