Skip to content
阅读进度

如何理解死锁、锁顺序与竞争? ​

返回 Java 与并发 目录

标准回答 ​

死锁通常涉及环形等待等条件。先收集所有相关线程栈,画出“线程等待哪把锁、锁由谁持有”的关系,而不是只看一个blocked线程。跨进程同步调用还可能扩大等待环。

设计上统一锁顺序,缩短临界区,不在持锁期间执行可能阻塞的IPC、I/O或外部回调。必要时改为不可变快照、消息串行化或分离计算与提交;超时是保护,不自动修复错误状态。

锁竞争不一定死锁,但长时间占用可直接破坏UIdeadline。应测wall time持锁时间与竞争分布,避免用频繁tryLock忙等制造CPU压力。

追问与回答 ​

方法加synchronized就不会并发bug了吗 ​

只能保护遵守同一锁约定的访问。其他入口不加锁、在锁外读取共享状态或回调重入,都可能破坏假设。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。