多线程锁的升级原理是什么

        在 Java 中,锁共有 4 种状态,级别从低到高依次为:无状态锁,偏向锁,轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。

多线程锁锁升级过程

        如下图所示

        多线程锁的升级过程主要指的是锁从偏向锁状态升级为轻量级锁状态,再升级为重量级锁状态的过程。以下是多线程锁的升级过程:

        1.偏向锁状态

        在偏向锁状态下,对象头中的 Mark Word 被设置为偏向锁标记,并记录了持有锁的线程ID。因此,当一个线程访问共享数据时,无需进行同步操作,可以直接进入临界区执行操作。如果其他线程也需要访问该共享数据,此时需要升级为轻量级锁状态。

        2.轻量级锁状态

        在轻量级锁状态下,对象头中的 Mark Word 被设置为指向锁记录的指针,同时锁记录结构体中包含了持有锁的线程ID和锁标志位等信息。此时,竞争线程会使用CAS(Compare and Swap)操作尝试获取锁,如果成功获取锁,则直接进入临界区执行操作;如果获取失败,则说明存在竞争,需要升级为重量级锁状态。

        3.重量级锁状态

        在重量级锁状态下,对象头中的 Mark Word 被设置为重量级锁标记,并将当前线程挂起,等待锁被释放后再唤醒线程进行竞争。由于重量级锁采用了操作系统内核的互斥机制,因此会引入较大的性能开销。

        在实际应用中,锁的升级过程通常是自动完成的。例如,在偏向锁状态下,当有其他线程竞争同一个锁时,就会自动升级为轻量级锁状态;当竞争激烈时,就会自动升级为重量级锁状态。这种锁升级过程的自动完成是通过对象头中的 Mark Word 标记位来实现的。

        在多线程编程中,锁的升级过程是非常重要的,可以根据并发场景进行优化,以提高程序的性能和稳定性。但是,在使用锁的过程中,也要避免死锁等问题,以确保程序的正确性和可靠性。

多线程锁状态对比

多线程中的锁升级原理

        指的是在锁的级别上进行优化,以提高并发性能。Java 中的锁升级机制主要包括无锁、偏向锁、轻量级锁和重量级锁。

  1. 无锁状态(无同步):当一个线程访问共享数据时,不需要任何同步操作,因为没有其他线程与之竞争。

  2. 偏向锁状态:当只有一个线程访问共享数据时,该线程会将对象头中标记位设置为偏向锁标记,表示该对象处于偏向锁状态。之后,该线程可以直接进入临界区执行操作,无需进行同步操作。这样,对于只有一个线程访问共享数据的情况,减少了同步的开销。

  3. 轻量级锁状态:当存在多个线程竞争同一个锁时,对象头中的标记位会变为轻量级锁标记。此时,竞争线程会使用CAS(Compare and Swap)操作来尝试获取锁。如果成功获取锁,则直接进入临界区执行操作;如果获取失败,则说明存在竞争,进一步升级为重量级锁。

  4. 重量级锁状态:当多个线程竞争同一个锁时,对象头中的标记位会变为重量级锁标记。此时,竞争线程会进入阻塞状态,操作系统会将其挂起,等待锁释放后再唤醒线程进行竞争。

        锁的升级原理是为了尽量减少锁带来的性能开销。在程序运行的过程中,锁的状态会根据竞争情况进行升级和降级,以适应不同的并发场景。当只有一个线程访问共享数据时,使用偏向锁可以避免不必要的同步开销;当存在竞争时,使用轻量级锁可以通过CAS操作快速获取锁,避免线程的阻塞和唤醒;当竞争激烈时,使用重量级锁可以确保线程安全,但可能会引入较大的性能开销。

        Java 中的锁升级机制是为了在提供线程安全的同时,尽量减少锁带来的性能影响,提高并发性能。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com/home)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178472.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ha-NeRF源码解读 train_mask_grid_sample

目录 背景: (1)Ha_NeRF论文解读 (2)Ha_NeRF源码复现 (3)train_mask_grid_sample.py 运行 train_mask_grid_sample.py解读 1 NeRFSystem 模块 2 forward()详解 3 模型训练tranining_st…

windows和docker环境下springboot整合gdal3.x

链接: gdal官网地址 gdal gdal的一个用c语言编写的库,用于处理地理信息相关的数据包括转换,识别数据,格式化数据以及解析 同时提供第三方语言的SDK包括python,java上述需要编译后使用 java是需要使用jni接口调用实现方法在wind…

SAR 系统基本原理

目录 1.真实孔径雷达 2.合成孔径雷达 本文由CSDN点云侠原创,爬虫网站请自重。 1.真实孔径雷达 RADAR 中文名称雷达,是 Radio Detection And Ranging(无线电探测与定位)的缩写。雷达发射机产生足够的电磁能量,经过收发…

人工智能-多层感知机

隐藏层 该模型通过单个仿射变换将我们的输入直接映射到输出,然后进行softmax操作。 如果我们的标签通过仿射变换后确实与我们的输入数据相关,那么这种方法确实足够了。 但是,仿射变换中的线性是一个很强的假设。 线性模型可能会出错 例如&…

MySQL8.0安装

安装过程 一.官网下载离线tar包二.安装MySQL三.验证 一.官网下载离线tar包 点击此处下载 链接:https://pan.baidu.com/s/1_p2esJax95Ow39wfgM_paw 提取码:g415 –来自百度网盘超级会员V2的分享 二.安装MySQL 1.上传到/usr/local目录下 2.解压安装包…

Tigger绕过激活锁/屏幕锁隐藏工具,支持登入iCloud有消息通知,支持iOS12.0-14.8.1。

绕过激活锁工具Tigger可以用来帮助因为忘记自己的ID或者密码而导致iPhone/iPad无法激活的工具来绕过自己的iPhone/iPad。工具支持Windows和Mac。 工具支持的功能: 1.Hello界面两网/三网/无基带/乱码绕过,可以完美重启,支持iCloud登录、有消…

香港高端人才通行证计划入围高校/全球百强大学综合名单公布!

香港高端人才通行证计划入围高校/全球百强大学综合名单公布! 香港高才通计划希望吸引世界各地具备丰富工作经验及高学历的人才到香港探索机遇,这些高端人才包括高收入人士和在世界顶尖大学毕业的学生。 此计划并不适用于阿富汗、古巴、老挝、朝鲜、尼泊尔…

Python框架之Flask入门和视图

一、Flask入门和视图 需要安装Pycharm专业版 1. Flask简介 Python后端的2个主流框架 Flask 轻量级框架Django 重型框架 Flask是一个基于Python实现的web开发微框架 官方文档:https://flask.palletsprojects.com/ 中文文档:https://dormousehole.readthe…

WPF RelativeSource属性-目标对象类型易错

上一篇转载了RelativeSource的三种用法,其中第二种用法较常见,这里记录一下项目中曾经发生错误的地方,以防自己哪天忘记了,又犯了同样错误—WPF RelativeSource属性-CSDN博客 先回顾一下: 控件关联其父级容器的属性—…

物联网AI MicroPython传感器学习 之 QMC5883指南针罗盘传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 QMC5883是一款表面贴装的集成了信号处理电路的三轴磁性传感器,应用场景主要包括罗盘、导航、无人机、机器人和手持设备等一些高精度的场合。 引脚定义 VCC:3V3&#…

在Qt中List View和List Widget的区别是什么,以及如何使用它们

2023年10月29日,周日晚上 目录 List View和List Widget的区别 如何使用QListView 如何使用QListWidget List View和List Widget的区别 在Qt中,QListView 和 QListWidget 是用于显示列表数据的两个常用控件,它们有一些区别和特点。 1. 数…

遥遥领先,免费开源的django4-vue3项目

星域后台管理系统前端介绍 🌿项目简介 本项目前端基于当下流行且常用的vue3作为主要技术栈进行开发,融合了typescript和element-plus-ui,提供暗黑模式和白昼模式两种主题以及全屏切换,开发bug少,简单易学&#xff0c…

新手必看的Facebook广告投放基础思路

一、广告账号要求 如果您还没有Facebook账号,那么第一步是准备Facebook账号。 1、配置正确的网络环境 Facebook账号需要在稳定安全的网络环境中运行,否则很容易导致封禁。像我们常用的是Maskfog指纹浏览器,可以通过自定义浏览器指纹与为环…

私有网络的安全保障,WorkPlus Meet内网视频会议助力企业高效会议

在企业内部沟通与协作中,视频会议成为了一种必不可少的沟通方式。然而,传统的互联网视频会议往往受制于网络不稳定因素,给企业带来不便与困扰。WorkPlus Meet作为一款专注内网视频会议的软件,致力于为企业打造高效、稳定的内网视频…

Vue 3 响应式对象:ref 和 reactive 的使用和区别

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面并携带参数

【关键字】 服务卡片、卡片跳转不同页面、卡片跳转页面携带参数 【写在前面】 本篇文章主要介绍开发服务卡片时,如何实现卡片点击跳转不同页面,并携带动态参数到js页面。在此篇文章“服务卡片 API6 JSUI跳转不同页面”中说明了如果跳转不同页面&#xf…

[架构之路-250/创业之路-81]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业内的数据与数据库

目录 一、数据概述 1.1 数据 1.2 企业信息系统的数据 1.3 大数据 1.4 数据与程序的分离思想 1.5 数据与程序的分离做法 1.6 数据库的基本概念 1.7 企业数据来源 1.8 企业数据架构 二、常见的数据库类型 2.1 数据库分类 2.1 数据库类型 2.2 常见的数据库类型、应用…

【华为】路由器以PPPoE拨号接入广域网

组网需求 用户希望以PPPoE拨号方式接入广域网,如图1所示,Router作为PPPoE客户端,得到PPPoE服务器的认证后获得IP地址,实现用户接入互联网的需求。内网网关地址(即VLANIF1接口的IP地址)为10.137.32.1/24。 …

Linux越学越头疼,我要怎么办?

最近,听到一些同学说,“Linux越学越头疼”。其实这句话,在我之前刚接触Linux的时候,也是深有感触。Linux越学越不明所以。最后干脆放弃学习,转而学习其他东西。 其实大家在初学Linux的时候, 有这个感受&am…

[迁移学习]DA-DETR基于信息融合的自适应检测模型

原文标题为:DA-DETR: Domain Adaptive Detection Transformer with Information Fusion;发表于CVPR2023 一、概述 本文所描述的模型基于DETR,DETR网络是一种基于Transformer的目标检测网络,详细原理可以参见往期文章:…