外观
死锁和数据竞争怎样排查?
标准回答
数据竞争是多个线程在缺少正确同步时访问共享可变数据;死锁是线程之间形成循环等待而无法继续。排查时保留线程栈、锁拥有者和等待链,再结合日志与 Trace 还原发生顺序。
机制解释
常见危险是持有锁时执行同步 Binder、网络请求或外部回调。外部代码可能回调当前 SDK 或需要同一把锁,形成重入或交叉等待。更稳妥的是锁内只修改必要状态,复制结果后在锁外通知。
延伸追问
增加 synchronized 能修复所有并发 bug 吗?不能,锁范围过大可能把竞争变成阻塞或死锁。要先说清共享状态、所有者和允许的状态迁移。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q22