解释悲观锁与乐观锁

简介: 悲观锁如synchronized和Lock,通过阻塞确保线程安全;乐观锁如AtomicInteger,采用重试机制应对竞争。前者适合高竞争场景,后者适用于低竞争环境。二者思想类似,广泛应用于Java及数据库领域。

悲观锁

  • 像 synchronized,Lock 这些都属于悲观锁
  • 如果发生了竞争,失败的线程会进入阻塞
  • 【理解】悲观的名字由来:害怕其他线程来同时修改共享资源,因此用互斥锁让同一时刻只能有一个线程来占用共享资源

乐观锁

  • 像 AtomicInteger,AtomicReference 等原子类,这些都属于乐观锁
  • 如果发生了竞争,失败的线程不会阻塞,仍然会重试
  • 【理解】乐观的名字由来:不怕其他线程来同时修改共享资源,事实上它根本不加锁,所有线程都可以去修改共享资源,只不过并发时只有一个线程能成功,其它线程发现自己失败了,就去重试,直至成功

适用场景

  • 如果竞争少,能很快占有共享资源,适合使用乐观锁
  • 如果竞争多,线程对共享资源的独占时间长,适合使用悲观锁

P.S.

  • 这里讨论 Java 中的悲观锁和乐观锁,其它领域如数据库也有这俩概念,当然思想是类似的


相关文章
|
负载均衡 应用服务中间件 API
Nginx、Kong、Apisix、Gateway网关比较
Nginx、Kong、Apisix、Gateway网关比较
6531 1
Nginx、Kong、Apisix、Gateway网关比较
|
存储 NoSQL Java
我了解的java中常见的数据结构
本内容介绍了常见的数据结构,包括线性结构(如动态数组、链表、栈、队列)和非线性结构(如优先级队列、哈希表、红黑树、跳表、B+树),并结合 Java 中的具体实现(如 ArrayList、LinkedList、PriorityQueue、HashMap、TreeMap 等)说明其特点与应用场景。
342 7
|
11月前
|
编解码 文字识别 自然语言处理
腾讯混元生图模型升级2.1版本:支持写字、2k分辨率,开源!
腾讯混元生图模型升级2.1版本:支持写字、2k分辨率,开源!
631 14
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
1090 5
|
机器学习/深度学习 人工智能 算法
最大熵逆强化学习:理论基础、数学推导与工程实现
本文重点讨论逆强化学习(Inverse Reinforcement Learning, IRL),这是模仿学习的重要分支,其核心目标是基于演示数据学习能够最大化期望奖励的最优策略。
506 0
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
2562 32
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
机器学习/深度学习 人工智能 达摩院
ClearerVoice-Studio:阿里通义开源的语音处理框架,提供语音增强、分离和说话人提取等功能
ClearerVoice-Studio 是阿里巴巴达摩院通义实验室开源的语音处理框架,集成了语音增强、分离和音视频说话人提取等功能。该框架基于复数域深度学习算法,能够有效消除背景噪声,保留语音清晰度,并提供先进的预训练模型和训练脚本,支持研究人员和开发者进行语音处理任务。
4199 3
ClearerVoice-Studio:阿里通义开源的语音处理框架,提供语音增强、分离和说话人提取等功能
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
2573 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
安全 应用服务中间件 网络安全
宝塔面板网站页面出现403错误怎么办?
用宝塔面板安装搭建WordPress或者其它程序网站,经常会遇到建好了网站,然后网站页面出现403错误。本文详细说明如何解决这个问题。并帮你分析这个错误出现的原因。 你的服务器 403 Forbidden nginx这通常是由于文件或目录的权限设置不正确造成的。 解决办法是检查文件或目录的权限设置,确保Nginx服务器有访问权限。 站点访问权限通常为www用户组的。
1898 5
宝塔面板网站页面出现403错误怎么办?

热门文章

最新文章