Skip to content
阅读进度

死锁和数据竞争怎样排查? ​

返回 Java 与并发 目录

标准回答 ​

数据竞争是多个线程在缺少正确同步时访问共享可变数据;死锁是线程之间形成循环等待而无法继续。排查时保留线程栈、锁拥有者和等待链,再结合日志与 Trace 还原发生顺序。

机制解释 ​

常见危险是持有锁时执行同步 Binder、网络请求或外部回调。外部代码可能回调当前 SDK 或需要同一把锁,形成重入或交叉等待。更稳妥的是锁内只修改必要状态,复制结果后在锁外通知。

延伸追问 ​

增加 synchronized 能修复所有并发 bug 吗?不能,锁范围过大可能把竞争变成阻塞或死锁。要先说清共享状态、所有者和允许的状态迁移。

内容来源 ​

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