2011-10-05 59 views
3

運行過程中出現的線程轉儲的Tomcat進程CompilerThread狀態我只是注意到如下:在Tomcat 6

"CompilerThread0" daemon prio=10 tid=0x02b57400 nid=0xe0c waiting on condition [0x00000000] 
    java.lang.Thread.State: RUNNABLE 

我的理解是,CompilerThread(任何數量)是由JVM編譯字節碼轉換爲本地代碼運行,但我想就此進行確認。 但我主要關心的是線程說'處於等待狀態',但後來在RUNNABLE狀態下聲明。 我誤解了什麼?最後,[0x00000000]的含義是什麼?

感謝

回答

2

所以一個逐個字段細分:

  1. "CompilerThread0" - Tomcat有用於編譯JSP編譯器線程。首次訪問JSP時,JSP將被編譯爲一個Java類。
  2. daemon - 這是一個守護線程,以免讓你的應用程序活着的時候,你選擇退出
  3. prio=10 - 使JSP編譯優先於其他請求最高的優先級。
  4. nid=0xe0c - 實際上不知道。 ;)
  5. waiting on condition [0x0000000] - 該線程當前阻止等待某人發出信號喚醒並執行某些操作。與nid一樣,我並不確定[0x000000]是指什麼。如果那是我們正在等待的東西,我懷疑它會保存一個對象監視器的地址。
  6. java.lang.Thread.State: RUNNABLE - 一個線程等待條件仍然被認爲不善於RUNNABLE

一兩件事,看起來有點麻煩,首先是線程可運行,即使它在等待。這是違反直覺的,但它與JVM區分條件和對象監視器(例如用於等待/通知的機制)的事實有關。

希望有幫助!

+0

好吧,它確實是違反直覺的,因爲其他一些線程被標記爲「等待狀態」並處於WAITING(睡眠)狀態。該nid是操作系統本機進程標識 – Leonardo