阿里P8大牛总结的Java锁机制入门笔记,堪称教科书式天花板

news2024/11/27 22:30:40

前言

锁机制无处不在,锁机制是实现线程同步的基础,锁机制并不是Java锁独有的,其他各种计算机语言中也有着锁机制相关的实现,数据库中也有锁的相关内容。这篇文章就是从Java入手,深入学习、理解Java中的锁机制,提升Java并发编程能力。


 

1、乐观锁

乐观锁是一种乐观思想,假定当前环境是读多写少,遇到并发写的概率比较低,读数据时认为别的线程不会正在进行修改(所以没有上锁)。写数据时,判断当前 与期望值是否相同,如果相同则进行更新(更新期间加锁,保证是原子性的)。

Java中的乐观锁:CAS,比较并替换,比较当前值(主内存中的值),与预期值(当前线程中的值,主内存中值的一份拷贝)是否一样,一样则更新,否则继续进行CAS操作。

如下图所示,可以同时进行读操作,读的时候其他线程不能进行写操作。

2、悲观锁

3、自旋锁

4、可重入锁(递归锁)

5、读写锁

6、公平锁

7、非公平锁

8、共享锁

9、独占锁

10、重量级锁

11、轻量级锁

12、偏向锁

13、分段锁

14、互斥锁

15、同步锁

16、死锁

17、锁粗化

18、锁消除

19、synchronized

20、Lock和synchronized的区别

21、ReentrantLock 和synchronized的区别

ReentrantLock是Java中的类 : 继承了Lock类,可重入锁、悲观锁、独占锁、互斥锁、同步锁。

划重点

相同点:

1.主要解决共享变量如何安全访问的问题

2.都是可重入锁,也叫做递归锁,同一线程可以多次获得同一个锁,

3.保证了线程安全的两大特性:可见性、原子性。

不同点:

  • 1.ReentrantLock 就像手动汽车,需要显示的调用lock和unlock方法,synchronized 隐式获得释放锁。

  • 2.ReentrantLock 可响应中断, synchronized 是不可以响应中断的,ReentrantLock 为处理锁的不可用性提供了更高的灵活性

  • 3.ReentrantLock 是 API 级别的, synchronized 是 JVM 级别的

  • 4.ReentrantLock 可以实现公平锁、非公平锁,默认非公平锁,synchronized 是非公平锁,且不可更改。

  • 5.ReentrantLock 通过 Condition 可以绑定多个条件

总结

为了不影响大家的阅读体验,这篇Java锁的学习笔记已经为大家打包好了,需要的小伙伴点赞+转发,私信我 即可获取,希望这份学习笔记可以帮助大小伙伴愉快的突破对Java锁的理解和入门进阶。

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

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

相关文章

【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、需求描述 想必大家都见过商场里的智能语音机器人,你对它提问时它可以自动回答你的问题,接下来我们也实现这样一个机器人,它依靠语音技术完成问询服务 基本功能如下 1:接收人们…

智能家居—— 树莓派摄像头捕捉人脸并识别

文章目录下载安装mjpg-streamer树莓派安装libcurl库树莓派安装openssl库语音控制开启摄像头线程拍照代码及步骤语音控制摄像头拍照camera.ccontrolDevice.h下载安装mjpg-streamer 参考博文:智能家居 —— 树莓派下载安装mjpg-streamer(完成拍照录像监控…

市面上真正的全光谱灯品牌有哪些?全光谱护眼照明灯的作用很明显

众所周知,人眼感知任何事物都离不开光线的照射,但很多人可能不知道,光线不仅可以使我们“看得见”,还可以决定我们是否看得“真实”,这是怎么回事呢?其实这就是光线的色谱丰富度的问题。 人眼感知最舒适的光…

堆、堆排序、堆应用

一、概述 “堆”(Heap),原地排序、时间复杂度O(nlogn)的排序算法。 堆是一个完全二叉树;堆中每一个节点的值都必须大于等于(或者小于等于)其子树中每个节点的值; 二、如何实现一个堆 使用数…

第2-4-7章 docker安装WorkBench-规则引擎Drools-业务规则管理系统-组件化-中台

文章目录8. WorkBench8.1 WorkBench简介8.2 安装方式8.2.1 传统方式安装8.2.2 docker安装drools workbench8.3 使用方式8.3.1 创建空间、项目8.3.2 创建数据对象8.3.3 创建DRL规则文件8.3.4 创建测试场景8.3.5 设置KieBase和KieSession8.3.6 编译、构建、部署8.3.7 在项目中使用…

Intel PAUSE 指令变化如何影响 MySQL 的性能

导读 x86、arm指令都很多,无论是应用程序员还是数据库内核研发大多时候都不需要对这些指令深入理解,但是 Pause 指令和数据库操作太紧密了,本文通过一次非常有趣的性能优化来引入对 Pause 指令的理解,期望可以事半功倍地搞清楚 C…

微服务线上问题排查困难?不知道问题出在哪一环?那是你还不会分布式链路追踪

咱们以前单体应用里面有很多的应用和功能,依赖各个功能之间相互调用,使用公共的代码包等等,排查问题,使用类似于 gdb/dlv 工具或者直接查看代码日志,进行定位和分析 但是现在我们基本上都是微服务架构了,将…

Node.js 入门教程 20 查看 npm 包安装的版本 21 安装 npm 包的旧版本

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Node.js 入门教程20 查看 npm 包安装的版本21 安装 npm 包的旧版本20 查看 npm 包安装的版本 若要查看所有已安装的 npm 软件包&#xff08…

JetpackCompose Navigation导航快速上手

Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转 这是完整的结构(忽略掉红线划过的那个包) 编写欲跳转的两个页面 编写 Demo1 页面 子页面使用多个 composable 组件相组合的方法一一装配起来 Demo1m…

【博客543】golang pprof性能调试:寻找cpu瓶颈

golang pprof性能调试:寻找cpu瓶颈 1、引入pprof进行性能调试 在代码中加入: import _ "net/http/pprof"go func() {http.ListenAndServe("0.0.0.0:8899", nil) }()示例:为冒泡排序加入pprof debug package mainimpo…

月薪2万的大数据职位,为什么必须学习Python?

前言 马云说:“未来最大的资源就是数据,不参与大数据十年后一定会后悔。”毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰。 我们先来看一下数据分析相关职位现在的薪…

Cys(Npys)-(Arg)₉,H2N-C(Npys)-RRRRRRRRR-OH

可渗透细胞的非精氨酸酰胺,可以很容易地偶联到负载分子上,例如通过马来酰亚胺-硫醇偶联。 编号: 126721中文名称: Cys(Npys)-(Arg)₉英文名: Cys(Npys)-(Arg)₉单字母: H2N-C(Npys)-RRRRRRRRR-OH三字母: H2N-Cys(Npys)-Arg-Arg-Arg-Arg-Arg-Arg-Arg-Arg-…

多肽标签TC tag,H2N-CCPGCC-OH

编号: 168488中文名称: 多肽标签TC tag英文名: TC tag单字母: H2N-CCPGCC-OH三字母: H2N-Cys-Cys-Pro-Gly-Cys-Cys-COOH氨基酸个数: 6分子式: C19H32N6O7S4平均分子量: 584.75精确分子量: 584.12等电点(PI): 9.13pH7.0时的净电荷数: 3.85平均亲水性: -1疏水性值: 1.33来源: 人工…

Vision Transformer

Vision Transformer 将Transformer应用于CV领域。 不了解Transformer的先去看下:一文看懂Transformer 对比Transformer,ViT的特殊之处不多。因为作者说了他们想要做“尽量少的改动”将Transformer直接应用于图像领域 论文下载地址:https:…

留学Paper写作需要怎么正确引用?

1.MLA文献引用格式的基本描述:文学类Paper通常使用MLA(Modern Language Association)格式。作者在正文中用括号夹注的形式注明参考文献的简要出处,即(作者姓氏页码)。 Ancient writers attributed the inve…

小学生python游戏编程arcade----坦克换色

小学生python游戏编程arcade----坦克换色前言坦克换色1、RGB颜色1.1 RGB1.2 PIL 模块中的image1.3 效果图![在这里插入图片描述](https://img-blog.csdnimg.cn/f533a0bed98f4b49a462a2f056c35786.png)#### 1.4 代码实现1.5 总结2、RGB转换为HSV2.1 RGB2.2 HSV2.3 python RGB 转…

《前端框架开发技术》HTML+CSS+JavaScript 制作个人简历模板

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

23、Mybatis查询功能4(查询结果为一个map集合(多条数据))

Mybatis查询功能4(查询结果为一个map集合(多条数据)) 可以用Lsit集合接收可以用MapKey注解设置键(用一个唯一标识)第一步: 第二步: 第三步:

我的第一个Servlet程序,并理解浏览器和代码如何关联在一起

目录 Servlet 第一个Servlet程序 1.创建项目 maven是什么 如何创建maven项目 2.引入Servlet依赖 找到库中maven代码 3.创建目录结构 4.编写代码 理解注解Webserlet 5.打包程序 生成war包 6.部署程序 7.验证程序 二.理解浏览器发的请求是怎么和自己写的代码建立联…

景联文智能标注平台将数据处理效率提升十倍以上!数据精准度最高可达99%

目前主流的机器学习方式是以有监督的深度学习方式为主,这对标注数据有着强较依赖性需求,未经标注处理过的原始数据多以非结构化数据为主,这些数据难以被机器识别和学习。这就需要标注员借助数据标注工具对数据进行标注。 使用高效率的标注工具…