悲观锁、乐观锁的区别及使用场景

悲观锁、乐观锁的区别及使用场景定义:悲观锁(Pessimistic Lock): 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。乐观锁(Optimistic Lock): 每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候…

大家好,又见面了,我是你们的朋友全栈君。

定义:

悲观锁(Pessimistic Lock): 
每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。

乐观锁(Optimistic Lock): 

每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新,如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,期间该数据可以被其他线程进行读写操作。

使用场景:

悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

总结:两种所各有优缺点,读取频繁使用乐观锁,写入频繁使用悲观锁。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147273.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月13日 下午5:16
下一篇 2022年6月13日 下午5:16


相关推荐

  • Android 开发环境详细概述

    Android 开发环境详细概述理解AndroidApp开发环境搭建的部分以及他们之间如何联系,协调工作(会和理解为什么要去做,知其然知其所以然)掌握环境搭建的步骤掌握配置环境项的用途,以方便我们的开发操作Android开发组成Java+AndroidSDK+开发工具(IDE)Android的开发语言是Java,只有安装JDK才能让Java运行起来Android的SDK提供了运行和硬件开发环境Eclipse开发工具可以提高编…

    2022年7月23日
    13
  • Celer推出基于原子交换技术的跨链桥方案cBridge,今日主网上线

    Celer推出基于原子交换技术的跨链桥方案cBridge,今日主网上线据官方消息,CelercBridgev1.0版本今天正式主网上线。cBridge是一个支持高速低成本的跨链支付网络,用户可以立即使用cBridge在Ethereum、Arbitrum、BinanceSmartChain以及Polygon进行高速低成本跨链和跨层转账(cbridge.celer.network)。cBridge将会在短期内支持更多的layer2和layer1区块链的跨链和跨层转账。此外,任何人都将能够通过运行cBridge节点加入cBridge网络以提供跨链跨层流动性,同时通过收取手

    2022年5月4日
    48
  • 【深度学习】 基于Keras的Attention机制代码实现及剖析——LSTM+Attention

    【深度学习】 基于Keras的Attention机制代码实现及剖析——LSTM+Attention说明大部分代码来源于网上 但网上的代码一下子可能难以入门或因版本原因报错 此处整理后进行详细分析 参考的代码来源 1 Attentionmec 网上大部分代码都源于此 直接使用时注意 Keras 版本 若版本不对应 在 merge 处会报错 解决办法为 导入 Multiply 层并将 attention dense py 第 17 行的 att

    2026年3月19日
    3
  • java定时器_iphone如何定时发送短信

    java定时器_iphone如何定时发送短信定时任务(如:定时发送短信邮箱等)前面整过一个任务调度,它是固定在每天几点等执行,对于要手动加入的时间的定时发送短信不适用。学习quartz首先了解三个概念:调度器:负责调度作业和触发器;触发器:设置作业执行的时间、参数、条件等;(简单触发器和Cron触发器)作业:定时任务内容,被执行的程序;下载必要的jar包,将quartz-x.x.x.jar和core和/或optional文件夹中的…

    2022年10月13日
    5
  • c语言findwindowex函数用法,VB中findwindowex函数的用法?

    c语言findwindowex函数用法,VB中findwindowex函数的用法?FindWindowEx函数函数功能:在窗口列表中寻找与指定条件相符的第一个子窗口。该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。参数:(1)hwndParent:要查找的子窗口所在的父窗口的句柄(如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索子窗口)。如…

    2022年5月31日
    37
  • idea 2021.5.3过期后怎么输激活码[在线序列号]

    idea 2021.5.3过期后怎么输激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    74

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号