2010-02-10 45 views
5

我創建了一個簡單的Java應用程序,它有一個JFrame和幾個JButton。當我嘗試使用JVMTI檢查Java應用程序時,發現雖然我沒有創建任何明確的線程,但它們中的很多都產生了。什麼是Java應用程序開始執行時spwaned的線程?

我能找到以下主題:

  • DestroyJavaVM
  • AWT-EventQueue的 - 0
  • AWT關斷
  • AWT-XAWT-守護線程
  • 的Java2D Disposer-守護線程
  • 線程0守護線程[由JVMTI代理創建]
  • 信號Dispatcher-守護線程
  • Finalize-守護線程
  • 參考Handler-守護線程

他們大多是在可運行狀態。有人能告訴我這些線程的功能嗎?

回答

9

這些線程被底層庫用來管理圖形應用程序所需的小部件,顯示,事件循環和其他管道。

GUI應用程序通常有很多移動部件,如果您注意到您不必明確編寫任何代碼來管理這些部件(例如,更新屏幕或繪製按鈕或處理鼠標移動)。是否這組後臺線程負責管理這些部分,並儘可能簡化您的工作以專注於您的應用程序邏輯。

這些線程由您使用的庫(例如AWT,Swing等)產生,通常會在終止時自行清理(以及它們管理的資源)。

1

我可以告訴你一個,並在三個猜...

  • AWT-EventQueue的 - 0

這是GUI/AWT/Swing線程。寫入GUI的任何內容都必須在此線程上執行!有時候,如果我認爲另一個線程MIGHT可能寫入GUI,那麼我會進入我認爲爭用可能發生的地步,並斷言當前線程的名稱與「AWT-EventQueue-0」匹配。

我真的希望Sun發佈了一個「調試」版本的庫,它在所有組件中聲明瞭正確的線程使用情況 - 它可以節省很多頭疼的事情,並且保證Java在崩潰GUI時有非常糟糕的REP真的是不明白這個主題的人。

這些可能都與螺紋垃圾收集器:

  • 的Java2D Disposer-守護線程
  • Finalize-守護線程
  • 參考Handler-守護線程
相關問題