【多线程】常见的几种锁策略以及synchronized的锁策略

news2025/1/23 1:06:08

目录

一、乐观锁与悲观锁

二、读写锁与互斥锁

三、轻量级锁与重量级锁

四、自旋锁与挂起等待锁

五、公平锁与非公平锁

六、synchronized锁策略

1、锁升级

2、锁消除

3、锁粗化


一、乐观锁与悲观锁

乐观锁与悲观锁描述了两种不同的加锁态度,乐观锁就预测锁冲突的概率低所以做的处理比较简单,悲观锁就是预测锁冲突的概率比较高所以做的处理比较复杂

二、读写锁与互斥锁

synchronized就是普通的互斥锁,当有两个线程竞争同一把锁时一个线程获取到了锁另一个线程就会等待,而读写锁就分几种情况:读锁和读锁之间不会产生竞争,写锁与写锁之间会产生竞争,写锁与读锁之间也会产生竞争,读写锁相比普通锁少了许多锁竞争优化了效率

三、轻量级锁与重量级锁

轻量级锁指的是加锁的开销比较小一般不涉及从用户态到内核态的切换,如接下来的自旋锁,重量级锁指的是加锁开销比较大一般涉及从用户态到内核态的切换,如下面的挂起等待锁

四、自旋锁与挂起等待锁

自旋锁是一种轻量级锁的实现,挂起等待锁是重量级锁的实现,自旋锁他会一直重复的询问当前锁是否释放,他会在第一时间获取到锁

五、公平锁与非公平锁

公平锁就是多个线程按照一定是顺序持有锁,非公平锁则是抢占式获取锁可能会出现后到先得情况

六、synchronized锁策略

1、锁升级

synchronized既是乐观锁也是悲观锁,既是轻量级锁也是重量级锁,乐观锁部分基于自旋锁实现悲观锁部分基于挂起等待锁实现,他是普通的互斥锁,是非公平锁也是可重入锁。synchronized是自适应锁,初始使用的时候,如果没有发生锁竞争,此时他并没有真正的加锁而是处于偏向锁的状态如果一直没有锁竞争就会处于偏向锁状态直到结束,偏向锁节约了加锁解锁的开销,如果在开始一段时间后发生了锁竞争且并不激烈,则是以基于自旋锁实现的轻量级锁来工作,如果后续锁竞争变得激烈了,则会以基于挂起等待锁实现得重量级锁来工作

2、锁消除

如果JVM判断发现此处不需要加锁而你加了synchronized,JVM就会将这个锁消除掉,或者你加了synchronized但是多个线程之间并不涉及变量得修改,JVM也会将这个锁进行消除,当然这与内存可见性不同的是这必须是JVM在100%确定得情况下

3、锁粗化

锁粗化类似下面的场景会发送锁粗化来提高效率

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

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

相关文章

怎么为Web服务器配置虚拟主机?【步骤演示】

在安装了Web服务器Apache后,为了更好地使用Apache,还需要学习如何对Apache进行配置。在项目开发中,经常需要配置虚拟主机和访问权限,下面对Web服务器的配置进行详细讲解。 配置虚拟主机 在默认情况下,Apache只有Chwe…

Detectron2 安装踩坑

在服务器上安装Detectron2: 设备:NVIDIA GeForce RTX 3090 显卡驱动和cuda: 安装detectron2时,报错为: Installing collected packages: detectron2Running setup.py develop for detectron2error: subprocess-exited…

智能博弈技术军事应用展望

源自:指挥与控制学院 作者:马悦 吴琳 郭圣明 摘 要 为利用智能技术解决现代战争中的意图判断、威胁评估与指挥控制, 提高军事决策水平, 将军事问题转化为博弈问题, 综合利用博弈论和人工智能(artificial intelligence, AI&#xff…

【Python 实战】---- 实现批量图片的切割

1. 需求场景 在实际开发中,我们会遇到一种很无聊,但是又必须实现的需求,就是比如协议、大量的宣传页面、大量的静态介绍页面、或者大量静态页面,但是页面高度很高,甚至高度可能会达到50000px,但是为了渲染…

手动开发-实现SpringMVC底层机制--小试牛刀

文章目录 前端控制器Controller注解RequestMapping注解自定义容器LingWebApplicationContext设计handlerList完成分发请求Service注解和AutoWired注解RequestParam注解完整代码 在这里说的底层机制的实现主要是指:前端控制器、Controller、Service注入容器、对象自动…

对话式人工智能的数据采集方案

基于噪声数据训练对话式人工智能 聊天机器人、虚拟助手、机器人等对话式人工智能 (Conversational AI Agents ) 在我们的日常生活中已随处可见。许多企业希望以更低的成本增强与客户之间的互动,并为此在该领域进行大量投资。大量数据表明,对话式人工智能…

泛型工具类型和操作符

前言 TypeScript 内置了一些常用的工具类型。 PartialRequiredOmitPick.... 操作符 typeof typeof 操作符可以用来获取一个变量声明或对象的类型 const p {x:2,y:cm} let g:typeof p {x:3,y:ff} 这里g需要满足: 有x属性且值是number类型 有y属性且值是string类型…

海鲜进口一站式数字化管理,提高工作效率

2022年,中国水产品进口国top10有:厄瓜多尔(主要品种为白虾、剑鱼、沙丁鱼、金枪鱼等)、俄罗斯(主要品种为鳕鱼、鲑鱼、鲱鱼等)、越南(主要品种为巴沙鱼、冻虾等)、印度(主…

认识HTTP请求

要分析HTTP请求和响应必然少不了抓包工具,关于抓包工具的设置和下载推荐看抓包工具Fiddler的下载与设置 通过抓包得到的一个HTTP请求 HTTP请求的格式 结构分析 一.请求行 1.post是方法,可以表示一条HTTP请求要进行的操作是什么,post通常表示…

使用终端MobaXterm连接Centos

1. 下载MobaXterm 官网: https://mobaxterm.mobatek.net/download.html 2. MobaXterm连接Linux 1 、查看刚才安装的 Linux 的 IP 地址 2、连接 3. Linux自带了JRE 由于javac指令不能运行,所以Linux只自带了JRE!!!

【C++】- set和map的具体使用(multiset和multimap的介绍)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

error:Failed building wheel for XXX

解决方案适用于大多数的pip 安装时出现的Failed building wheel for XXX 出现问题 按以往快速安装包的经验,第一反应当然是使用简单又快捷的terminal命令加上镜像,如下: pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple结…

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程 一、群晖套件中下载Cloud Sync 二、同步到百度云盘 打开Cloud Sync,点击左上角的号,云供应商选择百度云。 这里可以选择双向备份,也可以只上穿到百度云的仅上传本地更改。因为百…

D盘无法格式化?3个方法!轻松解决问题!

“我的电脑d盘好像中病毒了,我想将它格式化但是每次操作都显示d盘无法格式化。这是为什么呢?我应该怎么解决?” 有时候,我们的电脑可能会出现一些问题,导致我们不得不将某些磁盘进行格式化操作。这时候问题就出现了。有…

CSP 202005-1 重复局面

题目背景 国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。 问题描述 国际象棋每一个局面可以用大小为 的字符数组来表示,其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 k、q、…

Polarion导入需求(Word)

简介 将需求文档导入Polarion并实现自动创建工作项具有多个优势,这些优势有助于提高项目管理和协作的效率,以下是一些主要的优势点:减少手动工作: 自动创建工作项可以显著减少手动数据输入的工作量。不再需要手动逐一创建每个工作…

聚类-kmeans

聚类算法是无监督学习算法,指定将数据分成k个簇。然后通过每个点到各个簇的中心的欧氏距离来分类。 kmeans本身会陷入局部最小值的状况,二分kmeans可以解决这一点。 二分kmeans是遍历所有的簇,将其分成2个,比较哪一个分裂结果更…

2023年7月京东休闲食品行业品牌销售排行榜(京东大数据)

鲸参谋监测的京东平台7月份休闲食品市场销售数据已出炉! 根据鲸参谋平台的数据显示,7月份休闲食品市场整体呈现下滑趋势。当月休闲食品在京东平台的销量为3400万,环比下降约26%,同比下降约26%;销售额将近11亿&#xf…

Equall Apple 的革命性变压器:一个宽幅前馈,实现前所未有的效率和精度

变压器架构已显示出显著的可扩展性,从而大大提高了精度。然而,这种进步是以极高的计算要求为代价的,这已成为实际应用中的重大障碍。 尽管研究人员一直在积极寻求解决方案来减小变压器组件的尺寸并修剪注意力头等元素,但另一个关…

自动化测试01

测试脚本编写参考 selenium IDE 插件,firefox浏览器搜索安装,(无法安装) katalon recorder 负责输出脚本,输出模式,python2unitest , 无法输出python3类型脚本,仅参考 开发者工具 …