当前位置: 首页 > news >正文

乐观锁、悲观锁

一、悲观锁

        悲观锁 (Pessimistic Locking),具有强烈的独占和排他特性。它指的是对数据被外界修改持保守态度。因此,在整个执行过程中,将处于锁定状态。所以,悲观锁是一种悲观思想,它总认为最坏的情况可能会出现,它认为数据很可能会被其他人所修改,所以悲观铁在持有数据的时候总会把资源 或者 数据 铁住,这样其他线程想要请求这个资源的时候就会阻塞,直到等到悲观锁把资源释放为止。Java 中的 synchronized 和 ReentrantLock 是一种悲观锁思想的实现,因为synchronzied
和 ReetrantLock 不管是否持有资源,它都会尝试去加锁。

二、乐观锁

        乐观锁(Optimistic Locking) 相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。乐观锁的思想与悲观锁的思想相反,它总认为资源和数据不会被别人所修改,所以读取不会上锁,但是乐观锁在进行写入操作的时候会判断当前数据是否被修改过。Java中的stampedLock和 AtomicInteger 是一种乐观锁思想的实现。一般通过版本号控制来实现,乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。

版本号控制:一般是在数据表中加上一个数据版本号:version 字段,表示数据被修改的次数。当数据被修改时,version 值会 +1。当事务A 要更新数据时,在读取数据的同时也会读取 version 值,在提交更新时,若刚才读取到的 version 值与当前数据库中的 version 值相等时才更新,否则重试更新操作,直到更新成功。

相关文章:

  • 容器技术--Dockerfile 构建镜像
  • 【有啥问啥】弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法
  • Linux内核启动流程
  • 如何编写ChatGPT提示词
  • 前端面试记录
  • mysql学习教程,从入门到精通,SQL 更新数据(UPDATE 语句)(17)
  • OpenAI o1-preview和o1-mini现已在 GitHub Copilot和GitHub Models中提供
  • Linux 防火墙:iptables (二)
  • 第二十节:学习Redis缓存数据库实现增删改查(自学Spring boot 3.x的第五天)
  • Dubbo3序列化安全问题
  • 【有啥问啥】OpenAI o1的思考之前训练扩展定律、后训练扩展定律与推理扩展定律:原理与应用详解
  • CentOS7更换阿里云yum更新源
  • Python习题 191:将英文句子转为每个单词组成的列表
  • 从 HDFS 迁移到 MinIO 企业对象存储
  • (2)leetcode 234.回文链表 141.环形链表
  • 【最佳实践】配置类封装-RestTemplate详解
  • 【C/C++语言系列】浅拷贝和深拷贝
  • 动手学深度学习(五)循环神经网络RNN
  • Docker实操:安装MySQL5.7详解(保姆级教程)
  • 求和(2)
  • 来沪一个月几乎未花住宿钱,女子虚构卫生问题屡薅酒店羊毛被刑拘
  • 沙县小吃中东首店在沙特首都利雅得开业,首天营业额5万元
  • 哈马斯表示已释放一名美以双重国籍被扣押人员
  • 生态环境保护督察工作条例对督察对象和内容作了哪些规定?有关负责人答问
  • 珠峰窗口期5月开启 普通人登一次有多烧钱?
  • 白玉兰奖征片综述丨综艺市场破局焕新,多元赛道重塑价值坐标