MySQL8.0优化 - 锁 - 从对待锁的态度划分:乐观锁、悲观锁

news2025/1/15 20:33:12

文章目录

  • 学习资料
  • 锁的不同角度分类
    • 锁的分类图如下
    • 从对待锁的态度划分:乐观锁、悲观锁
      • 悲观锁(Pessimistic Locking)
      • 乐观锁(Optimistic Locking)
      • 两种锁的适用场景


学习资料

【MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!-哔哩哔哩】
【阿里巴巴Java开发手册】https://www.w3cschool.cn/alibaba_java

锁的不同角度分类

锁的分类图如下

在这里插入图片描述

从对待锁的态度划分:乐观锁、悲观锁

从对待锁的态度来看锁的话,可以将锁分成乐观锁和悲观锁,从名字中也可以看出这两种锁是两种看待数据并发的思维方式。需要注意的是,乐观锁和悲观锁并不是锁,而是锁的设计思想

悲观锁(Pessimistic Locking)

悲观锁是一种思想,顾名思义,就是很悲观,对数据被其他事务的修改持保守态度,会通过数据库自身的锁机制来实现,从而保证数据操作的排它性。

悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。比如行锁、表锁等,读锁,写锁等,都是在做操作之前先上锁,当其他线程想要访问数据时,都需要阻塞挂起。Java中synchronizedReentrantLock等独占锁就是悲观锁思想的实现。

悲观锁不适用的场景较多,它存在一些不足,因为悲观锁大多数情况下依靠数据库的锁机制来实现,以保证程序的并发访问性,同时这样对数据库性能开销影响也很大,特别是长事务而言,这样的开销往往无法承受,这时就需要乐观锁。

乐观锁(Optimistic Locking)

乐观锁认为同一数据的并发操作不会总发生,属于小概率事件,不用每次都对数据上锁,但在更新的时候会判断一下在此期间别人有没有去更新这个数据,也就是不采用数据库自身的锁机制,而是通过程序来实现。在程序上,我们可以采用版本号机制或者CAS机制实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量。在Java中java.util.concurrent.atomic包下的原子变量类就是使用了乐观锁的一种实现方式:CAS实现的。

两种锁的适用场景

从这两种锁的设计思想中,我们总结一下乐观锁和悲观锁的适用场景:
1、乐观锁适合读操作多的场景,相对来说写的操作比较少。它的优点在于程序实现不存在死锁问题,不过适用场景也会相对乐观,因为它阻止不了除程序以外的数据库操作。
2、悲观锁适合写操作多的场景,因为写的操作具有排它性。采用悲观锁的方式,可以在数据库层面阻止其他事务对数据的操作权限,防止读 - 写写 - 写的冲突。

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

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

相关文章

Ajax笔记

Ajax笔记资源的请求方式一、概念1、Ajax作用2、jQuery中的Ajax二、$.get()函数的语法$.get()发起不带参数的请求$.get()发起带参数的请求三、$.post()函数的语法$.post()向服务器提交数据<font colorred>四、$.ajax()函数的语法使用$.ajax()发起GET请求使用$.ajax()发起P…

JSP使用

目录 简介 作用 创建 结构 常用脚本 声名脚本 表达式脚本 代码脚本 注释 九大内置对象 四大域对象 out与response.getWriter 静态引入 动态引入 EL表达式 作用 语法 取值顺序 获取指定参数 输出指定对象的数据 运算符 算数运算符 关系比较 逻辑运算符…

【Vue】使用 axios 发送ajax 请求

在 Vue 里面我们如何去发送一些 Ajax(阿贾克斯)请求 从远程的网站上获取一些数据。 假如我们有这样的接口的地址&#xff1a; https://www.xxxx.site 假设它是一个能跨域访问的接口。‍‍‍‍ 如果我们想去在我们的代码里面发这种请求&#xff0c;我该怎么做&#xff1f; 首…

Ubuntu 桌面系统升级

本文介绍 Ubuntu 桌面系统升级的两种方式&#xff0c;通过 UI 或命令行的方式&#xff0c;演示为 20.04 升级为 22.04。并介绍了 windows 的 Linux 子系统 wsl 的升级注意事项。 背景 之前在学习 ROS2 时&#xff0c;安装 ros-humble-desktop 出现依赖错误&#xff1a;无法修正…

[附源码]java毕业设计食材采购平台论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

AI智工作室11.19练习题解

F CodeForces - 710A 训练1(共12题) - Virtual Judge 我的代码 #include<iostream> using namespace std; int main() {char arr[10][10],a;int b,c,k0;cin>>a>>c; ba-a1; // cout<<b<<" "<<c<<endl; for(int i0;i<9…

使用VSCode编辑与编译WSL2下源代码

1. 安装WSL2 2. windows下安装VSCode 3. VSCode安装插件Remote Development 北京时间2019年5月3日&#xff0c;在 PyCon 2019 大会上&#xff0c;微软发布了 VS Code Remote&#xff0c;开启了远程开发的新时代&#xff01;这次发布包含了三款核心的全新插件&#xff0c;它们…

Java文件操作【教你用Java运行微信】

文章目录01 创建文件02 获取文件信息03 目录操作和文件删除04 运行可执行文件01 创建文件 new File(String pathname) //根据路径创建一个File对象&#xff1b;new File(File parent,String child) //根据父目录文件子路径创建&#xff1b;new File(String parent,String chil…

使用mqtt.fx向EMQX服务器发送消息

摘要&#xff1a;本文介绍如何使用mqtt.fx向mqtt服务器&#xff08;EMQX&#xff09;发送消息。顺便介绍一下labview与EMQX连接成功的实现效果。 上一篇文章介绍了如何在ubuntu下安装emqx服务器&#xff0c;以及如何使用mqtt.fx订阅服务器上的一个主题。 ubuntu系统下搭建本地…

为什么ArcGIS添加的TIFF栅格数据是一片纯色

下面来介绍一下今天的正式内容&#xff1a;为什么你添加的tiff栅格数据明明有数据&#xff0c;为什么却在GIS中显示一片颜色。 即使你去拉伸后 他还是显示这样&#xff1f; 那如何才能让他正常显示呢&#xff1f; 逻辑其实是简单的。我们检查数据会发现&#xff0c;这份数据等…

Springboot集成HBase使用案例

一、HBase部署安装 1.HBase下载地址:Apache HBase – Apache HBase Downloads 2.解压启动(进入压缩包bin目录),本次演示的是macOS系统启动演示(windows系统启动命令:./start-hbase.cmd) ./start-hbase.sh 3. 浏览器访问http://IP:16010/master-status出现如下页面表示启动成功…

线程基础知识复习

线程基础知识复习 并发相关Java包 涉及到的包内容 java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks 并发始祖 并发始祖Doug Lea start线程解读 初始程序 public static void main(String[] args) {Thread t1 new Thread(() ->{},"t…

涛涛的Linux学习笔记

前言&#xff1a; 因为自己偏向Java后端开发&#xff0c;接触linux有一段时间了&#xff0c;但从来没系统的学过&#xff0c;用啥学啥&#xff0c;所以一直感觉体系不全&#xff0c;现在补补日常能用到的。 一、Linux的定位 二、Linux系统的目录结构 目录结构描述/根目录&#…

【云原生】Docker的初步认识,安装与基本操作

内容预知 1.docker的相关知识 1.1 docker的概念 1.2 docker三个重要概念 &#xff08;1&#xff09;image镜像 &#xff08;2&#xff09;container容器 &#xff08;3&#xff09;repostory仓库 1.3 docker的主要用途 1.4 docker与虚拟机的区别 namesapce&#xff…

STM32F334timer6-7

STM32F334timer6-7概况预分频器描述计数模式时钟概况 基本计时器&#xff08;TIM6/TIM7&#xff09;功能包括&#xff1a; •16位自动重新加载递增计数器 •16位可编程预分频器&#xff0c;用于将计数器时钟频率除以1和65535之间的任何因子&#xff08;也可“动态”&#xff0…

立方体贴图shade计算

正常的平面贴图是根据mesh顶点找到对应的uv坐标&#xff0c;然后根据重心坐标插值计算三角面内每个点的uv坐标值。最后根据uv坐标值查找平面贴图上的颜色值。 立方体贴图的6个面分别为6张图片&#xff0c;我们怎么根据mesh面上的坐标值来计算对应平面上的uv坐标值。 基本算法是…

【算法篇-数论】线性筛法(欧拉筛法)筛 n 以内的质数

筛质数1.线性筛法&#xff08;欧拉筛法&#xff09;介绍2.欧拉筛法代码以及分析3.总结本文参考自 B站董晓算法 1.线性筛法&#xff08;欧拉筛法&#xff09;介绍 我们的目标是筛出 2 ~ n 以内的质数 最最最暴力的方法就是一个数一个数判断是不是质数 但是这样的时间复杂度是非…

【Java第31期】:Spring中存储Bean的注解以及用法

作者&#xff1a;有只小猪飞走了 博客地址&#xff1a;https://blog.csdn.net/m0_62262008?typeblog 这期内容&#xff1a;揭开Bean存储的神秘面纱 文章目录前言一&#xff0c;Controller&#xff08;控制存储&#xff09;二&#xff0c;Service&#xff08;服务存储&#xff…

过拟合问题(机器学习)

训练误差代表分类方法对于现有训练样本集的拟合程度 泛化误差代表此方法的泛化能力&#xff0c;即对于新的样本数据的分类能力如何 模型的训练误差比较高&#xff0c;则称此分类模型欠拟合 模型的训练误差低但是泛化误差比较高&#xff0c;则称此分类模型过拟合 对于欠拟合…

QGIS制作精美地图

QGIS制作精美地图 1.首先新建一个Print Layout,并为其命名(PS:如果创建完不小心删了,点右面的Layout Manager即可~ 2.在右侧空白处,设置页面大小(也可以在空白页面右键——属性) 3.点击Items——Add Map,然后在空白页面框画一个范围,这与ArcGIS pro的操作类似(PS:如…