常见锁策略,CAS,synchrodized原理讲解

  • 🎥 个人主页:Dikz12
  • 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香
  • 欢迎大家👍点赞✍评论⭐收藏

目录

常见锁策略 

 乐观锁和悲观锁

轻量级锁和重量级锁

自旋锁和挂起等待锁

 读写锁

公平锁和非公平锁

CAS 

 ​编辑

 ABA问题

synchronized原理

synchronozed,属于哪种锁?

锁升级

 锁消除

锁粗化 


常见锁策略 

 乐观锁和悲观锁

 这是"锁的一种特性",并不是一把具体的锁!乐观,悲观是对后续锁冲突是否激烈给出的预测.

乐观锁: 如果预测接下来的锁冲突的概率不大,就可以少做一些事情,就称为"乐观锁".

悲观锁: 如果预测接下来的锁冲突的概率很大,就要多做一些事情,就称为"悲观锁".

轻量级锁和重量级锁

 轻量级锁: 锁的开销比较小.

重量级锁: 锁的开销比较大.

乐观锁,通常是可以看作轻量级锁    悲观锁,通常可以看作重量级锁.(也是存在特殊情况的)

一个是预测锁冲突的概率,一个是实际消耗的开销.

自旋锁和挂起等待锁

 自旋锁,就是一种轻量级锁的典型实现.

比如: 使用一个while循环,不停的检查当前锁是否释放,如果没有释放,就继续循环,释放了获取锁,从而结束循环.(忙等,消耗cpu换来了更快的响应速度).

挂起等待锁: 就属于重量级锁的一种典型实现.

要借助系统api来实现,一旦出现锁竞争,就会在内核中触发一系列的动作.(比如让这个线程进入阻塞状态,暂时不参与cpu调度).

 读写锁

这里的读写锁跟前面"事务"里的给读加锁 和 给写加锁 不是一样的概念.

速写锁,是加锁操作,分成读锁 和写锁.

两个线程加锁过程中:

1: 读锁和读锁之间,不会产生竞争.

2.读锁和写锁之间,会有竞争.(线程安全问题)

3.写锁和写锁之间,也会有竞争.

公平锁和非公平锁

 

CAS 

Compare and swap 简称 CAS. 比较交换的是 内存 和 寄存器.

CAS,就是一个cpu指令,单个的cpu指令,是原子的!就可以使用CAS完成一些操作,进一步替代"加锁".

也就是基于CAS实现线程安全的方式,也称为"无锁编程".

 优点:保证了线程安全,同时避免了阻塞.

 缺点: 1.代码比较复杂,不好理解

           2.适合于特定的场景,不如加锁方式更普适.

 

 原子类里面是基于CAS来实现的!!!

CAS是通过重试的方式,避免穿插; 加锁则是通过阻塞的方式,避免穿插.

 ABA问题

 CAS 进行操作的关键,是通过值"有没有发生变化" 来作为"没有其它线程穿插执行"的判断依据.

在极端情况下,也是会出现问题的.比如: 把值从A- > B ->A,针对第一个线程来说,看起来好像是这个值没变,实际上已经被穿插执行了.

 解决上诉问题:

只要让判定的数值,按照一个方向增长即可.  (有增有减,就可能出现ABA)

针对像账户余额这样的操作:

 可以引入一个额外的变量,版本号,约定每次修改余额,都要让版本号自增.

在使用CAS的时候,就不是直接判定余额,而是判定版本号.

synchronized原理

synchronozed,属于哪种锁?

1.对于"乐观悲观"是自适应的.

2.对于"轻量和重量"是自适应的.

3.对于"自旋和挂起等待"是自适应的.

4.不是读写锁.

5.是可重入锁 .

6.是非公平锁

 

锁升级

设计JVM的大佬就把synchronized 设置成了 无锁  偏向锁  轻量级锁  重量级锁 这四种状态.

 

当你加锁的时候会先进入偏向锁的状态,如果出现"锁竞争"的可能性就立刻升级成轻量级锁, 也就是真正意义上的加锁.

偏向锁:

 锁消除

 

锁粗化 

 synchronized 里头,代码越多,就认为锁的粒度越粗;代码越少,锁的粒度越细.

 

粒度细的时候,能够并发执行的逻辑更多,更有利于充分利用多核cpu资源.

但是,如果粒度细的锁,被反复加锁,解锁可能实际效果还不如粒度粗的锁. (涉及到锁竞争问题)

 

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

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

相关文章

基于Java+SpringBoot+Vue.js前后端分离玩具购物商城系统设计和实现 可行性分析

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

已解决java.lang.NullPointerException异常的正确解决方法,亲测有效!!!

已解决 java.lang.NullPointerException 异常的正确解决方法,亲测有效!!! 文章目录 问题分析 报错原因 解决思路 总结 Q1 - 问题分析 在Java编程中,NullPointerException 可能是最常见的运行时异常之一。这种异…

基于Java在线考试网站系统 设计与实现(Springboot框架)毕业设计论文提纲参考

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

264.【华为OD机试真题】最长子字符串的长度(二)(动态规划DP-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-最长子字符串的长度(二)二.解题思路三.题解代码…

Transformer 架构—Encoder-Decoder

文章目录 前言 一、Encoder 家族 1. BERT 2. DistilBERT 3. RoBERTa 4. XML 5. XML-RoBERTa 6. ALBERT 7. ELECTRA 8. DeBERTa 二、Decoder 家族 1. GPT 2. GPT-2 3. CTRL 4. GPT-3 5. GPT-Neo / GPT-J-6B 三、Encoder-Decoder 家族 1. T5 2. BART 3. M2M-100 4. BigBird 前言 …

每日五道java面试题之spring篇(三)

目录: 第一题 ApplicationContext和BeanFactory有什么区别?第二题 Spring中的事务是如何实现的?第三题 Spring中什么时候Transactional会失效?第四题 Spring容器启动流程是怎样的?第五题 Spring Boot、Spring MVC 和 S…

Sip网络广播号角,sip广播系统公共广播系统有源喇叭

Sip网络广播号角,sip广播系统公共广播系统有源喇叭 SV-7044VP网络有源喇叭,具有10/100M以太网接口,内置高品质扬声器,通过自带放大器播放网络音频,扬声器输出功率高达30W,还支持设置最多10个组播优先区域&…

js如何抛异常,抛自定义的异常

js如何抛异常,抛自定义的异常 最简单的自定义异常 throw "hello" 来自chrome123的控制台的测试 throw "hello" VM209:1 Uncaught hello (匿名) VM209:1 try{ throw "hello";}catch(e){console.log(e);} VM338:1 hello…

nuxt项目搭建

1.先下载nuxt脚手架 yarn create nuxt-app <项目名>&#xff0c;记得安装完项目&#xff0c;npm i,下载node包 目录介绍 components 存放组件分别是头部&#xff08;包含导航&#xff09;和底部 layouts 页面布局&#xff0c;实现一个页面整体架构规则&#xff0c;头…

XTuner InternLM-Chat 个人小助手认知微调实践

要解决的问题&#xff1a; 如何让模型知道自己做什么&#xff0c;是什么样身份。是谁创建了他&#xff01;&#xff01;&#xff01; 概述 目标&#xff1a;通过微调&#xff0c;帮助模型认清了解对自己身份弟位 方式&#xff1a;使用XTuner进行微调 微调前&#xff08;回答…

精致女童时尚穿搭~你想要的我都有哦

不论是版型还是颜色 都绝绝子的一件轻薄外套 整件看着干净利落有设计感 两侧按扣式口袋超级实用的 穿着透气不闷热 搭配各种风格的裤子都一绝

【安卓基础5】中级控件

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职 &#x1f3c6;本文收录于 安卓学习大全持续更新中&#xff0c;欢迎关注 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频…

中东阿拉伯阿联酋迪拜媒体宣发稿新闻报道推广有哪些平台渠道?跨境出海营销

【本篇由言同数字科技有限公司原创】阿拉伯联合酋长国是一个经济和文化极为繁荣的地区&#xff0c;其中的迪拜更是以其独特的地理位置、国际化的环境和世界级的商业和金融中心而出名。 1. 全球市场&#xff1a;阿联酋迪拜是一个全球化的商业枢纽&#xff0c;吸引了来自世界各地…

无线听觉新体验:南卡、韶音、墨觉骨传导耳机综合评测

作为一个资深的跑步爱好者&#xff0c;我几乎离不开音乐的陪伴。不知道大家有没有同感&#xff0c;有时候一首歌曲就是我坚持下去的动力&#xff0c;尤其是在那段艰难的跑步时刻。但是找到一款既能让我在运动中自由呼吸、又能提供优质音乐体验的耳机&#xff0c;并不是一件容易…

C#,动态规划(DP)丢鸡蛋问题(Egg Dropping Puzzle)的三种算法与源代码

1 扔鸡蛋问题 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;是求解决策过程最优化的过程。20世纪50年代初&#xff0c;美国数学家贝尔曼&#xff08;R.Bellman&#xff09;等人在研究多阶段决策过程的优化问题时&#xf…

船舶制造5G智能工厂数字孪生可视化平台,推进船舶行业数字化转型

船舶制造5G智能工厂数字孪生可视化平台&#xff0c;推进船舶行业数字化转型。随着数字化时代的到来&#xff0c;船舶行业正面临着前所未有的机遇与挑战。为了适应这一变革&#xff0c;船舶制造企业需要加快数字化转型的步伐&#xff0c;提高生产效率、降低成本并增强市场竞争力…

电气机械5G智能工厂数字孪生可视化平台,推进电气机械行业数字化转型

电气机械5G智能工厂数字孪生可视化平台&#xff0c;推进电气机械行业数字化转型。随着科技的不断发展&#xff0c;数字化转型已经成为各行各业发展的重要趋势。电气机械行业作为传统制造业的重要组成部分&#xff0c;也面临着数字化转型的挑战和机遇。为了更好地推进电气机械行…

就业月薪14K!两年后涨到25K! 考研失败后,这个95年小哥哥成功转行软件测试,人生开挂了!

01 考研连续失败 因为没有特别明确的职业规划&#xff0c;加上内心的学历崇拜情节。大学毕业后&#xff0c;我没有选择参加工作&#xff0c;而是毅然选择了加入考研大军。 备考的日子紧张有序&#xff0c;我也一直在题海里废寝忘食的遨游&#xff0c;本以为能顺顺当当地考上自…

每日学习总结20240221

每日总结 20240221 花自飘零水自流。一种相思&#xff0c;两处闲愁。 —— 李清照「一剪梅红藕香残玉簟秋」 1. stat 在Linux中&#xff0c;stat 是一个用于显示文件或文件系统状态的命令行工具。它提供了关于文件的详细信息&#xff0c;包括文件类型、权限、大小、所有者、修…

Codeforces Round 490 (Div. 3)

目录 A. Mishka and Contest B. Reversing Encryption C. Alphabetic Removals D. Equalize the Remainders E. Reachability from the Capital F. Cards and Joy A. Mishka and Contest 依照题目意思左右遍历标记即可 void solve(){cin>>n>>m;for(int i1;i…