乐观锁、悲观锁

ops/2024/10/16 0:23:46/

一、悲观锁

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

二、乐观锁

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

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


http://www.ppmy.cn/ops/114097.html

相关文章

【HTML样式】加载动画专题 每周更新

加载动画专题 煎蛋加载动画方块移动加载动画电子风变脸正方体组合跳跃式加载动画 煎蛋加载动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

vue一级、二级路由设计

一、一级路由设计 一级路由是指直接映射到应用程序中顶级页面或组件的路由。这些路由通常定义在Vue Router的配置中&#xff0c;作为应用程序导航结构的基础。 直接映射&#xff1a;一级路由直接映射到URL路径和Vue组件&#xff0c;没有嵌套关系。顶级导航&#xff1a;它们通…

828华为云征文|Flexus X实例GitLab部署构建流水线-私人一体化代码仓库~

目录 前言Gitlab 环境准备 GitLab部署 拉取GitLab镜像 创建映射目录 运行GitLab容器 修改gitlab.rb配置 开放端口 切换语言 创建项目 添加ssh密钥 克隆代码 CICD 什么是CICD Gitlab中使用CICD 什么是Runner 安装GitLab Runner 获取注册令牌 runner注册 交互…

高次幂运算取余

描述 输入b&#xff0c;p&#xff0c;k的值&#xff0c;求b^p mod k的值。其中b&#xff0c;p&#xff0c;kk为长整型数。 格式 输入格式 输入b&#xff0c;p&#xff0c;k的值。 输出格式 求b^p mod k的值。 样例 输入样例 2 10 9 输出样例 2^10 mod 97 思路 1、把p转化成…

arcgisPro修改要素XY容差

1、在arcgisPro中XY容差的默认值为1个毫米&#xff0c;及0.001米。为了更精细的数据&#xff0c;需要提高这个精度&#xff0c;如何提高呢&#xff1f; 2、如果直接在数据库下新建要素类&#xff0c;容差只能调至0.0002米。所以&#xff0c;需要在数据库下新建要素数据集。 3…

如何做系统架构?从动态系统思考的角度

在动态系统思考的背景下&#xff0c;系统架构不再只是一个静态的、结构化的设计&#xff0c;而是一个随着时间推移、基于不同要素互动产生涌现行为的动态过程。系统架构师的任务不仅仅是定义系统的形态和结构&#xff0c;更是通过剖析系统的互动网络、功能涌现和使用场景&#…

学习常用的Docker命令

Docker作为一种强大的容器化技术&#xff0c;为开发者提供了便捷的应用部署和管理方式。本文将介绍Docker常用命令&#xff0c;按照不同的操作分类&#xff0c;旨在帮助初学者更好地理解和使用Docker。Docker 常用命令可以分为以下几类&#xff1a; 容器命令&#xff1a;主要用…

linux 基础知识 什么是僵尸进程?有什么影响?如何解决?

linux 系统僵尸进程 在Linux系统中&#xff0c;僵尸进程&#xff08;Zombie Process&#xff09;是一种特殊的进程状态&#xff0c;它指的是一个已经完成执行的进程&#xff0c;其父进程尚未通过wait()或waitpid()系统调用来回收其资源和状态信息。 僵尸进程本身并不占用CPU和…