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

乐观锁和悲观锁

定义

什么是悲观锁?

悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞,直到锁被上一个持有者释放。也就是说,共享资源每次只给一个线程使用,其他线程阻塞,用完后再把资源转让给其他线程。

Java 中 synchronized 和 ReentrantLock 等独占锁就是悲观锁思想的实现。

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

在高并发场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。并且,悲观锁还可能会存在死锁的问题,影响代码正常运行。

什么是乐观锁?

乐观锁总是假设最好的情况,认为共享资源每次被访问时不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源是否被其他线程修改。

在高并发的场景下,乐观锁相比悲观锁,不存在锁竞争造成线程阻塞,也不会有死锁的问题,在性能上往往会更胜一筹。但是,如果冲突频繁发生(写占比多的情况),会频繁的失败和重试,这样同样会影响性能,导致 CPU 飙升。


文章转载自:
http://barrette.hdqtgc.cn
http://canadian.hdqtgc.cn
http://casal.hdqtgc.cn
http://carbarn.hdqtgc.cn
http://anopia.hdqtgc.cn
http://brrr.hdqtgc.cn
http://agonoze.hdqtgc.cn
http://cavern.hdqtgc.cn
http://busier.hdqtgc.cn
http://anecdote.hdqtgc.cn
http://aeromechanic.hdqtgc.cn
http://caseidin.hdqtgc.cn
http://albumen.hdqtgc.cn
http://bas.hdqtgc.cn
http://cachet.hdqtgc.cn
http://bouilli.hdqtgc.cn
http://anachronic.hdqtgc.cn
http://amateurship.hdqtgc.cn
http://atavism.hdqtgc.cn
http://cags.hdqtgc.cn
http://assertative.hdqtgc.cn
http://cavort.hdqtgc.cn
http://accelerogram.hdqtgc.cn
http://chlorin.hdqtgc.cn
http://characterise.hdqtgc.cn
http://aesthetical.hdqtgc.cn
http://bestiarian.hdqtgc.cn
http://breeze.hdqtgc.cn
http://chauffer.hdqtgc.cn
http://bobotie.hdqtgc.cn
http://www.dtcms.com/a/281401.html

相关文章:

  • 【好盈电调】使用 ESP32 的 PWM 驱动无刷电调,电调型号:XRotor Pro 80A BLDC V4.1
  • PBI(产品基本信息)系统如何构建
  • 【stm32】新建工程
  • 知识付费小程序资质全解析
  • 【CMake】使用 CMake 将多模块 C 项目构建为库并链接主程序
  • Spring MVC2
  • React 手动实现页面锚点导航
  • AI Agent 框架LangChain概述
  • 【MCU控制 初级手札】1.1 电阻
  • CUDA 环境下 `libcuda.so` 缺失问题解决方案
  • 自注意力机制:让 AI 像人类一样「读懂」上下文
  • 明远智睿SSD2351:开启嵌入式系统开发新时代
  • WebApplicationType.REACTIVE 的webSocket
  • dotnet命令详解
  • linux的数据库与web服务器
  • LSTM入门案例(时间序列预测)
  • 平升智慧水务整体解决方案,大数据驱动的智慧水务,让城市供水更智能
  • 康谋分享 | 破解数据瓶颈:智能汽车合成数据架构与应用实践
  • 改进_开源证券_VCF_多尺度量价背离检测因子!
  • 【从0-1的JavaScript】第1篇:JavaScript的引入方式和基础语法
  • 第五章 管道工程 5.2 燃气管道
  • 数据库第三次作业
  • 脚手架新建Vue2/Vue3项目时,项目文件内容的区别
  • yolo-world环境配置
  • 【PCIe 总线及设备入门学习专栏 5.1.1 -- PCIe PERST# 信号的作用】
  • 关于实习的经验贴
  • eSearch识屏 · 搜索 v14.3.0
  • Redis集群搭建(主从、哨兵、读写分离)
  • netstat -tlnp | grep 5000
  • 3.创建表-demo