首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java高级进阶多线程学习之路

首先来简单了解一下用户态和内核态,用户态和内核态简单来说只是程序不同的两种级别

一般来说操作系统的内核是跑在内核态上的,内核态有什么特权呢,他可以直接访问硬件,做一些普通程序无法做到的事,比如分配内存,线程调度,锁申请,这样的程序叫内核态的程序,那么普通的程序如何访问硬件呢,那就需要向内核态的程序申请

在最早jdk1.0时synchronized 被称为重量级锁,效率偏低,在大家都认为它效率低的时候呢就诞生了对synchronized的一系列优化,即synchronized内部的四种状态和升级过程

那么synchronized效率低,特别重的原因是什么呢?其实很简单,synchronized是跑在JVM上的,JVM对于os kernel来说呢就相当于是一个普通的应用程序,那么你想申请一把锁,对线程进行调度。实现这件事的时候 需要向操作系统内核申请,操作系统内核帮你管理这些线程,管理好了之后反馈给你。这个过程简单来说就是 从用户态到内核态的访问,访问完了由内核态再反馈回来,这个就叫重量级锁。

现在大家都知道,在java中很多实现中,很多都是轻量级锁,比如JUC中的CAS(下篇会详细介绍)。所谓的轻量级锁和重量级锁的区别是什么呢?轻量级锁都是在用户态直接完成,不用惊动操作系统,而重量级锁需要向操作系统申请。在现在synchronized内部的执行过程中,他会首先使用轻量级锁,在用户态中完成,如果完成不了才会去申请重量级锁,即内核态的锁,这就是synchronized的升级过程。

关注公众号: “迷糊兔COMBO”可以获取最新的文章更新                                                      

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200927A0F1Y300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券