synchronized锁状态和底层实现

news/2024/12/23 7:16:26/

锁的状态

        无锁状态偏向锁状态轻量级锁状态重量级锁状态。锁的状态是通过对象监视器在对象头中的字段来表明的,四种状态会随着竞争的情况逐渐升级。偏向锁、轻量级锁、重量级锁是针对synchronized的状态。

        这四种状态都不是 Java 语言中的锁,而是 JVM 为了提高锁的获取与释放效率而做的优化(使用synchronized时)

        无锁:没有任何线程使用锁对象。

        偏向锁:当前只有一个线程访问,在对象头 Mark World 中记录线程id,下次此线程访问时,可以直接获取锁。

        轻量级锁:当锁的状态为偏向锁时,还有线程来访问,升级为轻量级锁,然后让线程以自旋的方式获取锁,线程不会阻塞。

        重量级锁:当锁的状态为轻量级锁时,线程自旋获取锁的次数到达一定数量时,锁的状态升级为重量级锁,会让自旋次数多的线程进入阻塞状态,等待操作系统调度。因为访问量大时,线程都自旋获取锁,CPU消耗大。

        以上的状态设计都是Java为了优化 synchronized锁。

对象结构

        在 Hotspot 虚拟机中,对象在内存中的布局分为三块区域:对象头,实例数据和对齐填充;Java对象头是实现 synchronized 锁对象的基础。一般而言,synchronized 使用的锁对象是存储在Java对象头中,对象头是轻量级锁和重量级锁的关键。

        对象头中有一块区域称为 Mark World,用于存储对象自身运行时的数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID等待

<!--添加依赖-->
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.10</version>
</dependency>
java">import org.openjdk.jol.info.ClassLayout;public class PrintMarkWord {public static void main(String[] args) {PrintMarkWord printMarkWord = new PrintMarkWord();// 打印相关的对象头信息System.out.println(ClassLayout.parseInstance(printMarkWord).toPrintable());System.out.println("============================================================分割线============================================================");synchronized (printMarkWord) {// 尝试加锁改变对象头信息System.out.println(ClassLayout.parseInstance(printMarkWord).toPrintable());}}
}


http://www.ppmy.cn/news/1512676.html

相关文章

开始尝试从0写一个项目--后端(四)

借出&#xff0c;归还&#xff0c;管理 学生和管理员登录分离 学生登录到用户界面 管理员到后台 后台和用户分离 添加代码 sems-server/src/main/java/com/ljc/controller/user/UserStudentController.java package com.ljc.controller.user;import com.ljc.constant.Jwt…

怎么对前端的一些按钮做一个权限校验

在一般情况下,我们需要对一些按钮做一个权限校验,来保证只有有权限的用户才能看到 1.创建一个js文件,来写我们的全局方法 我的方法是这样的 import Vue from vue;Vue.mixin({methods:{hasAuth(perm) {var authority this.$store.state.menu.permList;if (authority.indexOf(…

AI科学家学问世,学术圈会有大动荡吗?

导读&#xff1a; 继ChatGPT等大型语言模型的突破之后&#xff0c;The AI Scientist的诞生更是令人震撼。这个全面自动化的科学研究系统能独立完成从生成研究想法到撰写论文的全过程&#xff0c;或许&#xff1a; 科学家要不存在了。©️【深蓝AI】编译 1. 摘要 通用人工智…

Qt-认识Qt(1)

目录 QT是做什么的&#xff1f; 什么是QT GUI开发的各种技术方案 QT支持的平台 Qt的版本和优点 开发工具概述 Qt是做什么的&#xff1f; Qt是用来干嘛的&#xff1f; 什么是Qt Qt是⼀个跨平台的C图形用户界⾯应用程序框架。它为应用程序开发者提供了建立艺术级图形界⾯所…

20240820模拟面试

20240820 一、 1.C语言中指针数组和数组指针的区别 答&#xff1a;指针数组本质上是一个数组&#xff0c;是一个指针变量的集合&#xff0c;即数组内的元素都是指针变量&#xff0c;类似于二维数组中存储的多个一维数组&#xff1b;数组指针本质是一个指针&#xff0c;是整个…

洛谷 P6280 [USACO20OPEN] Exercise G

题目来源于&#xff1a;洛谷 题目本质&#xff1a;dp&#xff0c;素数筛法&#xff0c;质数 本题与P4161基本一模一样 首先&#xff0c;分析题目发现&#xff0c;某个排列的需要进行恰好 K 步变回原样&#xff0c;这个时候K的值就是这个排序中各个环的长的的最小公倍数(lcm)。…

集团数字化转型方案(三)

集团数字化转型方案通过系统整合人工智能&#xff08;AI&#xff09;、大数据、云计算和物联网&#xff08;IoT&#xff09;技术&#xff0c;建立了一个全面智能化的业务管理平台&#xff0c;涵盖从业务流程自动化、数据驱动决策支持&#xff0c;到客户体验优化和供应链管理的各…

vue项目中html文本安全性过滤

vue项目中可能会使用到 v-html“htmlContent” 来展示富文本内容&#xff0c;对html文本即htmlContent进行安全性过滤&#xff1a; // html安全性过滤 <template><div v-html"safeHtmlContent(htmlContent)"></div </template> <script>…