2012-05-11 72 views
17

我正在研究一個具有線程問題的Java應用程序。在Java應用程序中尋找線程創建源

在使用了一段時間使用Netbeans分析器連接的應用程序,我可以看到創建多個線程。他們中的大多數完成了一些.5 seconds。我只能在應用程序中找到SwingWorkers。

而且,大多數由分析器顯示線程都正常線程而不是SwingWorkers。除非這些線程是由SwingWorker間接創建的,否則我懷疑應用程序使用的某些庫正在創建它們。

現在我想刪除這個問題。但是我找不到確定線程創建源的方法。如果你可以請建議一些其他的剖析器/工具,通過它我可以找到線程創建的來源(方法)。

+0

你有沒有考慮斂[當前棧跟蹤] [1]在你的線程構造函數中? [1]:http://stackoverflow.com/questions/1069066/get-current-stack-trace-in-java – OldCurmudgeon

+0

@OldCurmudgeon正如我剛纔看到在探查的結果線程,我不知道創建線程的時間和地點。因此我認爲我現在不能使用它。但是,一旦我使用下面列出的分析器,我可能會在某些本地化的情況下使用它,如果需要的話。感謝您的鏈接 – Ankit

+0

相關:http://stackoverflow.com/questions/9874641/tracking-java-thread-creation-and-lifetime –

回答

9

如果使用Eclipse和調試器是一種選擇,你可以嘗試以下操作:

  • 導入代碼到Java項目。
  • Ctrl-Shift-T(打開類型),輸入「線程」。 Thread類的二進制源編輯器打開。
  • 在大綱視圖中選擇所有線程構造函數,使用上下文菜單「切換方法斷點」。這爲構造函數創建了斷點。
  • 運行和調試。

或者

你可以得到Yourkit Java profiler,它也可用於評估。它可以顯示應用程序中創建的線程,包括它們的堆棧跟蹤(線程完成後)。它不會顯示線程的創建位置,但線程的堆棧跟蹤可能會爲您提供有關涉及的庫的一些線索。

+1

哇,這是一個很好的答案,這也是教學中如何正確使用Eclipse,以及如何有效有可能。 – dantuch

6

JProfiler可以做到這一點。線程監控視圖顯示了一個線程創建堆棧跟蹤 - 如果CPU記錄了當時活躍:

enter image description here

免責聲明:我公司開發的JProfiler