2009-08-22 99 views
1

我是一個java考試,在過去的考試學習講師問這個問題,我想知道是否有人能幫助我理解它:名稱2 Java虛擬機的線程

在java中的上下文解釋線程。給出一個當你可能使用線程的例子。命名兩個java虛擬機線程。

問題的前兩部分很簡單,但關於命名兩個VM線程的部分確實困擾着我。

回答

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 

雖然因人而異,因爲這些結果是高度依賴於您正在使用的JVM。

+0

完全回答我的問題表示感謝。 – 2009-08-22 21:52:46

+0

@Shane:不完全是。這樣一個試題一個理想的答案的另一部分應爲「...但它依賴於特定的JVM實現」。 – 2009-08-23 00:23:52

+0

@Stephen - 你是正確的,我會添加澄清 – 2009-08-23 09:58:17

0

所以,我不會給你答案。但是,想一想:Java是一種解釋型語言。它本身運行一個虛擬機(JVM)。爲了讓你的應用程序(線程)運行,它必須運行。因此,請考慮JVM中的所有線程,而不僅僅是應用程序的線程。

0

jvisualvm是檢查在運行時JVM的優秀工具。它會告訴你各種有趣的事情。