【问题标题】:Name 2 java VM threads命名 2 个 java VM 线程
【发布时间】:2009-08-22 21:35:07
【问题描述】:

我正在为 Java 考试而学习,在过去的考试中,讲师问了这个问题,我想知道是否有人可以帮助我理解它:

在java解释线程的上下文中。举例说明何时可以使用线程。命名两个 java 虚拟机线程。

问题的前两部分很简单,但是关于命名两个 VM 线程的部分真的让我很困惑。

【问题讨论】:

    标签: java jvm


    【解决方案1】:

    来自测试程序的简单线程转储显示以下线程 - 一个是应用程序线程,然后您有 8 个其他 JVM 线程:

    Full thread dump Java HotSpot(TM) Client VM (14.0-b16 mixed mode):
    
    "Low Memory Detector" daemon prio=6 tid=0x0aad6c00 nid=0x9c0 runnable [0x00000000]
       java.lang.Thread.State: RUNNABLE
    
    "CompilerThread0" daemon prio=10 tid=0x0aad0c00 nid=0x6d4 waiting on condition [0x00000000]
       java.lang.Thread.State: RUNNABLE
    
    "Attach Listener" daemon prio=10 tid=0x0aacb400 nid=0xda4 runnable [0x00000000]
       java.lang.Thread.State: RUNNABLE
    
    "Signal Dispatcher" daemon prio=10 tid=0x0aaca000 nid=0xcc8 waiting on condition [0x00000000]
       java.lang.Thread.State: RUNNABLE
    
    "Finalizer" daemon prio=8 tid=0x0aab7400 nid=0xba0 in Object.wait() [0x0ac2f000]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - waiting on <0x029a0b18> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(Unknown Source)
            - locked <0x029a0b18> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(Unknown Source)
            at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
    
    "Reference Handler" daemon prio=10 tid=0x0aab2c00 nid=0x418 in Object.wait() [0x0abdf000]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - waiting on <0x029a0a20> (a java.lang.ref.Reference$Lock)
            at java.lang.Object.wait(Object.java:485)
            at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
            - locked <0x029a0a20> (a java.lang.ref.Reference$Lock)
    
    "main" prio=6 tid=0x002b6400 nid=0x3d8 runnable [0x0090f000]
       java.lang.Thread.State: RUNNABLE
            at TestClass.main(TestClass.java:8)
    
    "VM Thread" prio=10 tid=0x0aaafc00 nid=0x184 runnable
    
    "VM Periodic Task Thread" prio=10 tid=0x0aad9000 nid=0xc7c waiting on condition
    

    虽然,YMMV 因为这些结果高度依赖于您使用的 JVM。

    【讨论】:

    • @Shane:不完全是。此类考试问题的理想答案的另一部分应该是“......但这取决于特定的 JVM 实现”。
    【解决方案2】:

    所以,我不会给你答案。但是,请考虑一下:Java 是一种解释型语言。它运行一个虚拟机本身(JVM)。必须运行才能让您的应用程序(线程)运行。因此,请考虑 JVM 中的所有线程,而不仅仅是应用程序的线程。

    【讨论】:

      【解决方案3】:

      jvisualvm 是在运行时检查 JVM 的出色工具。它会告诉你各种有趣的事情。

      【讨论】:

        猜你喜欢
        • 2010-10-02
        • 2010-10-20
        • 2011-04-23
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多