命名2个java VM线程

时间:2009-08-22 21:35:07

标签: java jvm

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

  

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

问题的前两部分很简单,但关于命名两个VM线程的部分真的很难理解我。

3 个答案:

答案 0 :(得分:5)

来自测试程序的简单线程转储显示以下线程 - 一个是应用程序线程,然后您有另外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。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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