【问题标题】:What are the Dalvik thread states?Dalvik 线程状态是什么?
【发布时间】:2014-04-21 22:39:10
【问题描述】:

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

提前谢谢...

【问题讨论】:

    标签: android dalvik android-anr-dialog


    【解决方案1】:

    Dalvik 线程状态总结:

    • 正在初始化 - 尚未运行。
    • 正在启动 - 尚未运行,但快到了。
    • 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”。)

    【讨论】:

    • 很好的答案,谢谢。我希望我能给它两个复选标记!
    • 好极了,我现在收到了
    • "RUNNING (a/k/a RUNNABLE) - 线程正在积极运行。VM 必须挂起所有线程来执行堆栈转储,因此您通常不会看到除此之外的任何线程正在转储堆栈的那个。“我不明白,我看不到哪个线程状态,RUNNABLE 还是 RUNNING?
    • 名称引用单个状态。 JDWP 调试器显示的内部常量和值是“RUNNING”,但线程转储代码打印“RUNNABLE”。 “a/k/a”表示“也称为”,表示一个名字是另一个名字的别名。
    猜你喜欢
    • 2018-07-05
    • 2013-05-03
    • 2011-11-24
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2018-01-20
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多