面试:为什么synchronized是一个悲观锁

synchronized 作为悲观锁的原因

synchronized 被归类为悲观锁,主要基于其设计理念和执行机制。悲观锁的核心思想是假设并发冲突频繁发生,因此在访问共享资源前会预先加锁,确保独占访问。以下是具体原因:

默认并发冲突假设

synchronized 的设计基于最坏情况假设,即认为多线程环境下共享资源的访问必然存在竞争。这种假设导致其在操作数据前直接加锁,阻止其他线程同时访问,避免潜在的数据不一致问题。

独占式锁机制

当线程进入 synchronized 修饰的代码块或方法时,会自动获取锁(对象监视器锁),其他线程必须等待锁释放才能继续执行。这种排他性特性是悲观锁的典型表现,强调"先加锁,后操作"的保守策略。

阻塞其他线程

如果锁已被占用,其他尝试获取锁的线程会被强制阻塞(进入 BLOCKED 状态),直到锁释放。这种阻塞行为是悲观锁实现线程安全的主要手段,与乐观锁(如 CAS 机制)的非阻塞重试形成对比。

适用场景

synchronized 适合高竞争场景,如多个线程频繁修改同一数据。悲观锁的优势在于简化了并发控制逻辑,但可能带来性能开销(如线程切换、等待时间)。

与乐观锁的对比

乐观锁(如 ReentrantLock 的尝试机制或 CAS)假设冲突较少,通过版本号或重试处理冲突。而 synchronized 不提供尝试机制,直接加锁,体现其悲观锁的本质。

总结:synchronized 的悲观锁特性体现在其默认加锁行为、独占访问机制以及对并发冲突的保守处理方式上。

相关推荐
云和数据.ChenGuang7 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠8 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
Cosolar10 小时前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架
silvamux_10 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
行走的陀螺仪10 小时前
【转型攻略】2026 年,后端 / 全栈工程师转 AI Agent 方向:能力地图、按周学习路线与面试要点
人工智能·面试·职场和发展
步行cgn11 小时前
StringHttpMessageConverter 详解:Spring MVC 中字符串读写的默认转换器
java·spring·mvc
摇滚侠11 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
小蒜学长11 小时前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
Deng桑11 小时前
SpringAI写第一个Agent-把工单循环跑起来
java·agent·工具调用·spring ai
考研保研资料分享12 小时前
法学保研中国人民大学诉讼法:英语讨论、辩论与两校笔试
面试