过程

synchronized锁升级的过程是指在Java虚拟机中,对于一个对象的锁,它会从无锁状态变为偏向锁状态,再从偏向锁状态变为轻量级锁状态,最后才会升级为重量级锁状态。

无锁

你可以通过设置JVM参数 -XX:BiasedLockingStartupDelay=0 来设置偏向锁的延迟时间。如果想要偏向锁立即生效,就需要将该参数设置为0。

偏向锁

偏向锁是指一段时间内,只有一个线程访问同步块,那么这个线程会自动获取锁,这样就不需要CAS操作来加锁解锁,从而提高了程序的运行效率。

轻量级锁

轻量级锁是指当锁是偏向锁时,被另一个线程访问,偏向锁就会升级为轻量级锁。轻量级锁使用CAS操作来加锁解锁,不需要互斥量,从而提高了程序的运行效率。

重量级锁

重量级锁是指当轻量级锁获取不到锁时,就会升级为重量级锁。重量级锁使用互斥量来加锁解锁,需要操作系统的协助,从而降低了程序的运行效率。