news 2026/6/16 0:11:07

synchronized会产生死锁吗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
synchronized会产生死锁吗

会,但要分清“synchronized本身不会自动死锁,但在使用不当时可以造成死锁”。


一、结论

👉synchronized不会主动产生死锁机制,但如果多个线程以不同顺序竞争多个锁,就会发生经典的线程死锁问题


二、什么情况下会发生死锁?

死锁的本质是:

多个线程互相持有对方需要的锁,并且都不释放


典型场景

Thread A: synchronized(lock1) { synchronized(lock2) { } } Thread B: synchronized(lock2) { synchronized(lock1) { } }

发生过程:

A 持有 lock1,等待 lock2 B 持有 lock2,等待 lock1

👉 双方互相等待 → 永远阻塞


三、死锁的四个必要条件

只要同时满足以下 4 个条件,就可能死锁:

1. 互斥条件

锁只能被一个线程持有

2. 占有且等待

线程持有锁的同时还在等待其他锁

3. 不可抢占

锁不能被强制释放

4. 循环等待

线程形成闭环等待链


四、synchronized 为什么容易造成死锁?

核心原因:

👉 synchronized 是不可中断阻塞锁

特点:

  • 获取不到锁 → 阻塞
  • 无超时机制
  • 无尝试机制(不像 tryLock)

五、synchronized 死锁 vs ReentrantLock

特性synchronizedReentrantLock
会不会死锁会(使用不当)会(使用不当)
能否避免❌ 无法主动避免✔ tryLock 可避免
是否可中断❌ 不可✔ 可中断
是否可超时❌ 不可✔ 可设置 timeout

六、如何避免 synchronized 死锁(面试加分)

1. 固定加锁顺序(最重要)

所有线程统一:先 lock1,再 lock2

2. 减少嵌套锁

  • 不要在同步块里再加同步块

3. 缩小锁范围

synchronized(lock) { // 只包关键逻辑 }

4. 使用 tryLock(替代方案)

if (lock1.tryLock()) { if (lock2.tryLock()) { } }

5. 避免长时间持锁

  • IO操作不要放同步块
  • RPC不要放同步块

七、一句话总结

👉 synchronized 本身不会主动产生死锁,但由于它是不可中断的独占互斥锁,在多锁嵌套且加锁顺序不一致的情况下,会导致线程互相等待,从而形成死锁。


八、如果面试官继续追问(关键)

Q1:怎么检测死锁?

👉 JVM 工具:

  • jstack
  • VisualVM
  • Arthas thread命令

Q2:synchronized 和 ReentrantLock 谁更容易死锁?

👉 都可能,但:

  • synchronized:无法中断 → 更“难恢复”
  • ReentrantLock:可 tryLock → 可规避
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 0:08:05

从实验室到千万“毛孩子”:武汉云克隆如何为犬类干细胞治疗研究铺上最后一块“基石”?

当全球动物干细胞治疗市场冲向8亿美元大关,中国企业在“细胞供应”的源头切下一块关键蛋糕“给狗换关节软骨”——听起来像科幻小说?但这不是想象。宠物医疗的进化速度,比你刷到的短视频推荐养狗教程要快得多。一个事实:全球动物干…

作者头像 李华
网站建设 2026/6/15 23:50:19

EP2AGX65DF25C5N的CPRI/OBSAI接口与PCIe加速器设计

EP2AGX65DF25C5N:Altera Arria II GX系列中端收发器FPGA深度解析在通信基础设施、视频广播、医疗成像以及各类需要高速串行接口和高密度逻辑处理的嵌入式系统中,FPGA的选型往往需要在逻辑容量、收发器性能和功耗之间寻求最佳平衡。Altera(现已…

作者头像 李华
网站建设 2026/6/15 23:48:57

2026论文隐藏级降AIGC软件大曝光:一键改写直达人工原创!

2026年的学术战场早已不是从前的模样,论文写作的生存压力正在经历一场前所未有的洗牌。过去大家还在为查重率发愁,现在却集体陷入了一场更深层次的焦虑——如何在不破坏论文专业性和学术严谨性的前提下,彻底消除AI痕迹?随着AIGC检…

作者头像 李华
网站建设 2026/6/15 23:42:04

QT连接达梦数据库DM8,为什么我总卡在UnixODBC这一步?

QT连接达梦数据库DM8:UnixODBC配置疑难排查指南 在国产化替代浪潮中,银河麒麟V10操作系统搭配达梦DM8数据库已成为许多企业的技术选择。作为一名QT开发者,当我们需要在这种环境下构建数据库应用时,UnixODBC往往成为连接过程中的&q…

作者头像 李华