外观
如何理解优先级反转与锁依赖?
标准回答
高优先级线程等待低优先级线程持有的资源,而中等优先级工作使低优先级持锁者迟迟不能运行,就可能形成优先级反转,结果是关键线程受间接延迟。
在Trace里看关键线程等待哪把锁或哪项资源,找到持有者,再看持有者是否长期Runnable、被谁抢占,以及锁内实际做什么。仅把等待线程调高优先级通常无助于释放锁。
解决方向是缩短临界区、避免锁内阻塞I/O或IPC、减少共享状态或采用适合的同步机制。优先级继承是否生效依赖具体锁和内核路径,不能保证每个Java synchronized或任意等待都自动继承。
追问与回答
锁只持有3ms,为什么主线程等了100ms
3ms可能只指持锁者实际运行时间,墙钟持有期间它还可能被抢占或等待其他资源。应测持有的经过时间。
内容来源
- Android 与 AI 工程 Wiki · 原条目
q062