首先来简单了解一下用户态和内核态,用户态和内核态简单来说只是程序不同的两种级别
一般来说操作系统的内核是跑在内核态上的,内核态有什么特权呢,他可以直接访问硬件,做一些普通程序无法做到的事,比如分配内存,线程调度,锁申请,这样的程序叫内核态的程序,那么普通的程序如何访问硬件呢,那就需要向内核态的程序申请
在最早jdk1.0时synchronized 被称为重量级锁,效率偏低,在大家都认为它效率低的时候呢就诞生了对synchronized的一系列优化,即synchronized内部的四种状态和升级过程
那么synchronized效率低,特别重的原因是什么呢?其实很简单,synchronized是跑在JVM上的,JVM对于os kernel来说呢就相当于是一个普通的应用程序,那么你想申请一把锁,对线程进行调度。实现这件事的时候 需要向操作系统内核申请,操作系统内核帮你管理这些线程,管理好了之后反馈给你。这个过程简单来说就是 从用户态到内核态的访问,访问完了由内核态再反馈回来,这个就叫重量级锁。
现在大家都知道,在java中很多实现中,很多都是轻量级锁,比如JUC中的CAS(下篇会详细介绍)。所谓的轻量级锁和重量级锁的区别是什么呢?轻量级锁都是在用户态直接完成,不用惊动操作系统,而重量级锁需要向操作系统申请。在现在synchronized内部的执行过程中,他会首先使用轻量级锁,在用户态中完成,如果完成不了才会去申请重量级锁,即内核态的锁,这就是synchronized的升级过程。
关注公众号: “迷糊兔COMBO”可以获取最新的文章更新
领取专属 10元无门槛券
私享最新 技术干货