Skip to content
阅读进度

死锁、竞态与线程安全怎样处理? ​

返回 Java 与并发 目录

标准回答 ​

竞态是结果依赖不可控的并发时序;死锁是线程互相等待对方持有的资源而无法前进。减少共享可变状态,是最直接的降低复杂度方式。

关键机制 ​

  • 锁要尽量短,不在持锁时做不可控 IO、远程 Binder 或调用外部回调;这些操作可能阻塞或重入。
  • 需要多把锁时约定统一获取顺序;使用快照、消息队列或单线程状态机,也能减少锁交叉。
  • 定位时看所有相关线程:谁在等什么、谁持有资源、持有者又在等待谁。

通俗例子 ​

A 持有设备锁并同步调用服务;服务回调又试图获取设备锁。即使每一段代码单看“都有锁保护”,组合后仍可能卡死。

易混淆点 ​

线程安全不等于全局加锁;过粗的锁可能把可并行任务串行化,并把低优先级慢任务带到主线程等待链上。

参考资料 ​

内容来源 ​

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