Java 多线程进阶:常见的锁策略/synchronized原理/CAS(更新中)

一.常见的锁策略

锁:非常广义的话题;

synchronized:只是市面上五花八门的锁的其中一种典型的实现,Java内置的推荐使用的锁;

(1)乐观锁 && 悲观锁

乐观锁:加锁的时候,假设出现锁冲突的概率不大;接下来围绕加锁要做的工作很少;

悲观锁:加锁的时候,假设出现锁冲突的概率很大;接下来围绕加锁要做的工作更多;

synchronized是乐观还是悲观的呢? "自适应"

使用synchronized,初始情况下是乐观的(预估接下来锁冲突不大),

同时会统计接下来锁冲突了多少次,

如果发现,锁冲突的次数达到一定程度了,就会转成悲观的.

C++中的std::mutex锁的特点就是悲观的.

(2)重量级锁 && 轻量级锁

重量级锁:加锁的开销比较大,要做更多的工作.[往往,悲观的时候,会做的重]

轻量级锁:加锁的开销比较小,要做的工作相对少.[往往乐观的时候,会做的轻]

不能100%等价,乐观悲观是站在"预估锁冲突"的角度;重量清凉则是站在加锁时间开销的角度;

(3)挂起等待锁 && 自旋锁

挂起等待锁属于是悲观锁/重量级锁的一种典型实现;(CPU消耗少,等待时间变多了)

预测拿到锁的概率不大,让出了CPU资源,CPU就可以用来做别的事了;

自旋锁属于是乐观锁/轻量级锁的一种典型实现;(CPU消耗多,等待时间相对少了)

忙等:等待的过程中不会释放CPU资源,不停的检测锁是否被释放.一旦锁被释放了,就立即有机会能获取到锁了;

若很多线程都在忙等总的CPU消耗就会非常高,故锁冲突概率不高的情况下,才能忙等;

并且若竞争太激烈,导致有些线程,要等待很久才能拿到锁;

---------------------------------------------------------------------------------------------------------------------------------

synchronized"自适应":

轻量级锁就是基于"自旋"的方式实现的.(JVM内部,用户态代码实现的);

重量级锁就是基于"挂起等待"的方式实现的.(调用操作系统 api, 在内核中实现的);

(4)公平锁 && 非公平锁

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

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

相关文章

数据库中存储树状关系的数据

三张表的文字描述 表1:包含字段A1,字段A2,字段A3. 字段A1是主键 表2:包含字段B1,字段B2,字段A1 字段B1是主键,字段A1是其外键。 1个字段A1的值可以匹配多条表2的记录. 表3:包含字段C1,字段C2&am…

下午题数据库设计15分

一、考什么 题目会给场景,和数据库的设计过程,让你补充残缺的E-R图,关系模式,找主键外键。还有1-2分的随机题型。 二、答题技巧 熟练基本知识结合题干 三、例题

【OD】【E卷】【真题】【200分】项目排期(PythonJavaJavaScriptC++C)

题目描述 项目组共有N个开发人员,项目经理接到了M个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成,不能多人合作。假定各个需求直接无任何先后依赖关系,请设计算法帮助项目经理进行工作安排…

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

python图片文件路径排序

解决用sord 排序文件路径乱序问题: image_files 是 图片文件路径列表[pythonProject/video2img/1.jpg,pythonProject/video2img/2.jpg,.......] image_files.sort(keylambda x: int(x.split(/)[-1].split(.)[0]))

颜廷利:东方智慧的现代诠释者

人文公社 2024年10月21日 东方智者颜廷利, 哲学思想论古今, 和善互爱满天下, 无私奉献情意深… 在当代哲学与文化交融的浪潮中,颜廷利以其深邃的东方智慧和对古今思想的独到见解,成为了一位备受瞩目的思想家。他不仅倡导和谐共处、互爱互助的理念,更以自身的行动践行着无私…

Hi3061M——VL53L0X激光测距(IIC)(同样适用于其他MCU)2

目录 前言资源下载移植基本使用IO配置调用测量 总结 前言 昨晚太晚了,草草结束了上一篇,今天更新下半部分。 昨天已经讲了VL53L0X的使用流程,无非就是进行6步的效准初始化,然后配置下模式和时间,开始采样,…

Python-函数self详解

在Python中,self 是一个特殊的关键字,主要用于类(class)的定义中,表示类的实例(instance)本身。以下是对 self 的详细解释: 类和实例的概念: 类(Class&#…

Yolov10训练的餐盘菜品目标检测软件(包含源码及数据集)

本文摘要 摘要:本文主要使用YOLOV10深度学习框架自训练了一个“餐盘菜品目标检测模型”,基于此模型使用PYQT5实现了一款界面软件用于功能演示。让您可以更好的了解和学习,该软件支持图片、视频以及摄像头进行目标检测,本系统所涉…

【python】OpenCV—Fun Mirrors

文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作 pip install vacm2、原理介绍 在OpenCV中,VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。 一、VC…

AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件

大概这世上,都是职场牛马对“PPT”这三个字母的头痛反应最大吧! 是的,就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下,将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…

React 项目热更新失效问题的解决方案和产生的原因

背景和意义 在修复React项目热更新失效的问题时,经过一系列问题排查和依赖升级,最终成功修复了问题并为后续开发规避了类似的问题。 依赖升级 Vite版本升级 原React项目Vite版本升级到^4.4.5 Vite 4 在构建和开发服务器的性能上进行了优化&#xff…

R01 vue+springboot 高考志愿推荐AI问答大数据平台

可以查看本文系统对应的视频讲解: vuespringboot 高考推荐AI问答志愿推荐大数据 R01 带增删改查、大屏、支持爬虫 1 系统背景 近年来,高考作为中国教育体系中最重要的考试之一,承载了无数考生和家庭的梦想。随着信息技术的迅猛发展&#xff…

class GenericRow(protected[sql] val values: Array[Any]) extends Row

class GenericRow(protected[sql] val values: Array[Any]) extends Row 是 Scala 语言中的一行代码,定义了一个名为 GenericRow 的类,它继承自 Row 类。下面是这行代码的详细解释: 组件解析 class GenericRow: 这是类的定义,类名…

如何用bat脚本修改windows环境下jenkins服务的登陆密码

在Windows系统下,你可以使用批处理文件(.bat)来修改Jenkins服务的登录密码。但请注意,这通常涉及到对Windows服务的配置,并且需要管理员权限。 以下是一个基本的步骤和示例脚本,用于修改Jenkins服务的登录…

直击工博会|可靠的数据传输与洞察,助力工业设备实现灵活互联

2024 年 9 月 24 日,第 25 届中国国际工业博览会在国家会展中心(上海)隆重开幕。今年,HMS 工业网络再度强势出击,携多款创新解决方案亮相于 6.1H-B112 展位。特别值得一提的是,HMS 旗下的红狮控制&#xff…

UDP/TCP协议详解

目录 一,自定义应用层协议: 1)xml 2),JSON 3),yml 4),google protobuffer 二,传输层UDP/TCP: UDP协议: TCP协议: TCP的核心机制一:确认应答 TCP核心机制二:超时重传 TCP核心机制三:连接管理 TCP核心机制四:滑动窗口 TCP核心机制五:流量控制 TCP核心机制六:拥塞控制…

HT6881 4.7W防削顶单声道音频功率放大器

1 特性 ● 防削顶失真功能(Anti-Clipping Function,ACF) ● AB类/D类切换 ● 优异的全带宽EMI抑制性能 ● 免滤波器数字调制,直接驱动扬声器 ● 输出功率 1.4W (VDD3.6V, RL4Ω, THDN10%, Class D) 2.8W(VDD5.0V,RL4Ω, THDN10%, ClassD) 4.7W(VDD6.5V,RL4Ω, THDN…

Maven--简略

简介 Apache旗下的一款开源项目,用来进行项目构建,帮助开发者管理项目中的jar及jar包之间的依赖,还拥有项目编译、测试、打包的功能。 管理方式 统一建立一个jar仓库,把jar上传至统一的仓库,使用时,配置…

WebSocket介绍和入门案例

目录 一、WebSocket 详解1. 定义与特点:2. 工作原理:3. 应用场景: 二、入门案例 一、WebSocket 详解 1. 定义与特点: WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传…