11

每个 ANR 转储都会列出 ANR 时所有线程的状态。我知道是什么WAIT意思,但做什么SUSPENDED和是什么MONITOR意思?

提前致谢...

4

1 回答 1

38

Dalvik 线程状态总结:

  • 初始化 - 尚未运行。
  • STARTING - 尚未运行,但快到了。
  • ZOMBIE - 已故(你不应该看到这个)。
  • RUNNING (a/k/a RUNNABLE) - 线程正在运行。VM 必须挂起所有线程来执行堆栈转储,因此除了转储堆栈的线程之外,您通常不会看到任何线程。
  • WAIT - 线程调用 wait(),并且正在耐心等待。
  • TIMED_WAIT - 线程调用 wait(),超时。(Thread.sleep() 被实现为定时等待。)
  • MONITOR - 线程在监视器锁上被阻塞,即它在试图进入“同步”块时被卡住。
  • NATIVE - 线程在本机代码中执行。VM 不会挂起本机代码中的线程,除非它们进行 JNI 调用(此时它们转换为 RUNNING,然后立即转换为 SUSPENDED)。
  • VMWAIT - 线程被阻止获取 VM 资源,如内部互斥锁。或者可能正在等待某事做(例如编译器和 GC 线程)。
  • SUSPENDED - 线程可运行,但已暂停。如前所述,堆栈转储程序喜欢在遍历它们的堆栈之前暂停所有线程,因此您的繁忙线程通常会以这种方式显示。(在旧版本中,此状态不存在;“suspended”曾经是“RUNNING with a nonzero sCount”。)
于 2014-04-21T22:44:13.037 回答