外观
如何理解死锁、锁顺序与竞争?
标准回答
死锁通常涉及环形等待等条件。先收集所有相关线程栈,画出“线程等待哪把锁、锁由谁持有”的关系,而不是只看一个blocked线程。跨进程同步调用还可能扩大等待环。
设计上统一锁顺序,缩短临界区,不在持锁期间执行可能阻塞的IPC、I/O或外部回调。必要时改为不可变快照、消息串行化或分离计算与提交;超时是保护,不自动修复错误状态。
锁竞争不一定死锁,但长时间占用可直接破坏UIdeadline。应测wall time持锁时间与竞争分布,避免用频繁tryLock忙等制造CPU压力。
追问与回答
方法加synchronized就不会并发bug了吗
只能保护遵守同一锁约定的访问。其他入口不加锁、在锁外读取共享状态或回调重入,都可能破坏假设。
内容来源
- Android 与 AI 工程 Wiki · 原条目
q076