Synchronized锁升级的过程是性能和安全性的一个平衡,而性能的重要体现就是由用户态到内核态切换的过程。
锁升级过程简述:
- 无锁:对象刚创建的时候,默认是无锁状态;
- 偏向锁:只有一个线程去尝试获取锁的时候,此时生成的是偏向锁;
- 轻量级锁:在竞争不太激励的情况下,线程会使用CAS自旋的方式去获取锁,并且自旋的最大次数是10次。
-
重量级锁:线上就会被挂起,进入Block状态。
用户态与内核态:
- 用户态:进程在用户控件运行,可以进行基本的计算和访问内存等操作。
- 用户态:进程如果需要进行硬件访问、系统调用等,就需要进入内核控件进行,也就是内核态。在内核下就可以进行所有的系统调用,例如I/O操作等。
- 二者的切换:用户态进入内核态的过程中需要进行上下文切换,即将原来进程的CPU状态保存起来,然后加载进程的CPU状态,这个过程需要耗费一定的时间开销。