悲观锁和乐观锁(易懂)

news/2024/11/16 19:07:04/

这里可以把悲观锁看作悲观的人,啥事都往最坏的方向想。乐观锁看作乐观的人,啥事都往最好的方向想。

首先,说一下悲观锁。悲观锁就是假设并发情况下一定会有其他线程来修改数据,因此在处理数据之前,先将数据锁住,确保其他线程不能进行修改。感觉像一个过于悲观的做法,想象一下,所有人去上街,你一定要把自己房门锁好才出门,这样就保证自己的房间不会被人闯入了。但是这种做法存在缺点,比如频繁的加锁、解锁会占用大量的系统资源,降低了并发性能,因此在高并发场景使用悲观锁是比较麻烦的,并且还可能出现死锁问题,影响代码的运行。
像 Java 中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

public void performSynchronisedTask() {synchronized (this) {// 需要同步的操作}
}private Lock lock = new ReentrantLock();
lock.lock();
try {// 需要同步的操作
} finally {lock.unlock();
}

接下来是乐观锁,在多线程并发情况下,不加锁也可以保证数据的正确性。它假设数据不会被其他线程修改,只有在更新时才进行数据冲突的检测,一旦发现冲突则进行回滚或者重试。这种做法就像大家去上街,对于自己的房间不再“悲观地”加锁,但是在回家,会发现门打开了,还有可能看到留在家中物品被人碰过或拿走了,于是就重新处理一下回家的情况。
乐观锁一般会使用版本号机制或 CAS 算法实现
像 Java 中java.util.concurrent.atomic包下面的原子变量类(比如AtomicInteger、LongAdder)就是使用了乐观锁的一种实现方式 CAS 实现的。

// LongAdder 在高并发场景下会比 AtomicInteger 和 AtomicLong 的性能更好
// 代价就是会消耗更多的内存空间(空间换时间)
LongAdder longAdder = new LongAdder();
// 自增
longAdder.increment();
// 获取结果
longAdder.sum();

悲观锁和乐观锁虽然思想大相径庭,但是都能达到保证数据一致性的目的。在应用场景上要选对合适的锁机制,不然会浪费时间和资源哦。
悲观锁是一种更加保守的策略,适用于竞争激烈的场景,而乐观锁是一种更加乐观的策略,适用于竞争不激烈的场景。它们各有优点和局限性,需要根据具体情况来选择使用。(这里的竞争激烈指的是多写场景)


http://www.ppmy.cn/news/266399.html

相关文章

superset db upgrade报错记录

superset db upgrade报错记录 报错1报错2报错3报错4报错5报错6成功了 报错1 (superset) [hyjhadoop102 ~]$ superset db upgradefrom markupsafe import soft_unicode ImportError: cannot import name soft_unicode from markupsafe (/opt/module/miniconda3/envs/superset/l…

深入解析Spring源码系列:Day 14 - Spring的国际化支持

深入解析Spring源码系列:Day 14 - Spring的国际化支持 介绍 在第十四天的深入解析Spring源码系列中,我们将探讨Spring框架中的国际化支持。国际化是现代应用程序中不可或缺的一部分,它允许应用程序在不同的地区和语言环境下提供本地化的用户…

配置SSH远程登录和免密登录

上一篇我们已经讲了如何配置修改Linux的主机名和网络设置,这一篇我们来讲一下配置Linux的SSH免密登录。   首先讲一下我们为什么要配置SSH 免密登录,通过VMware Workstation工具操作虚拟机十分不方便,无法复制内容到虚拟机中,也…

【Docker】3.Docker Registry

文章目录 Docker RegistryDocker Registry CommandImage Command NginxNginx System installNginx Config Container CommandCreate My DegistryBusyBox腾讯云镜像仓库搭建 Docker Registry 镜像仓库负责存储、管理、分发镜像,并且提供了登录认证的能力&#xff0c…

显卡测试软件硬盘版怎么安装,显卡检测软件(Alexander)

显卡检测软件Alexander是由精易论坛坛友开发的实用显卡检测工具,可以精确显示显卡的各项硬件信息参数,实时同步电压、温度等关键信息,便于超频玩家对显卡状态进行检查监控。 相关软件软件大小版本说明下载地址 显卡检测软件(Alexander)是由精…

显卡测试软件velmon,furmark显卡测试工具

furmark显卡测试工具是一款显卡烤机软件。furmark显卡测试工具通过皮毛渲染算法来衡量显卡的性能,同时还能借此考验显卡的稳定性,是用户进行显卡测试最佳助手。 furmark显卡测试工具使用方法: 1、该软件默认界面语言是英语,但是它…

amd显卡风扇调节_显卡风扇转速调节

显卡风扇转速调节的方法非常多,而且显卡风扇转速调节也并不麻烦。为了让老铁们不再受显卡风扇噪音的扎心,IT百科在这里告诉大家调节N卡和A卡显卡风扇转速的方法,让主机重获安静,提升用机体验。还等什么,一起来看看吧! …

显卡满载测试软件,如何让主机跑满载测试?

如何让主机跑满载测试? 我们专业的电源评测都是使用电子负载对电源进行加载,普通消费者可没有这么昂贵专业的仪器。但还是有一些软件可以选择的,例如3DMark、Furmark、OCCT、ORTHOS、LinX以及AIDA64等等。其中AIDA64使用比较方便,…