2009-01-21 67 views
7

我正在研究一個正在慢慢變得越來越大的項目,並且許多不同進程使用的活動線程數量正在增加。最近,我一直在仔細研究調試器中正在運行的線程,我注意到很多我的第三方庫給他們的線程賦予了很差的名字 - Timer-0,qtp0等。我希望其他開發人員不熟悉與命名不佳的線程立即知道正在運行的是什麼。在Java中重命名線程

與其爲我們正在使用的庫編寫補丁,沒有人知道如何重命名正在運行的線程?或者,如果這是一個好主意?任何建議,將不勝感激。

+4

只是好奇,在這裏 - 也叫不佳線程惹惱其他人? – Elijah 2009-01-21 23:48:27

+0

您應該修復創建錯誤或非命名線程的庫。我討厭調試你的庫的線程,只發現其他地方發生更改的名稱。 – 2009-01-22 00:05:38

回答

4

如果問題出現在開源庫中,那麼最好的解決方案是爲這些產品提供補丁以獲得更好的線程命名。除非安全管理器正在運行,否則可以通過枚舉線程(如其他人提到的)併爲每個線程應用任意名稱來重命名任何線程,但這是命名非自己的線程的脆弱方式。如果第三方庫更改其命名,則必須更改代碼。

我同意使用命名不清的線程的第三方庫會更難理解您的應用程序正在發生什麼。但是重命名第三方庫的線程是有風險的。如果他們的下一個版本改變他們命名線程的方式會發生什麼?那麼如何處理一個根本不會嘗試命名線程的第三方庫?

編輯:加回的文字,不知怎的,從最終

2

您可以使用Thread.enumerate()Thread.getAllStackTraces()來獲取正在運行的主題的列表。然後您可以撥打Thread.setName()

我不能告訴你它是否是個好主意,但我可能會傾向於「不」。您編寫的代碼越多,您需要維護的代碼就越多。

6

是的,您可以使用setName()方法更改線程的名稱。

至於這是不是一個好主意,沒有確切的說法,但依賴於線程名稱以外的任何其他人可讀的描述將是一個非常糟糕的決定,大多數圖書館不會這樣做。因此,如果您重命名它們,則不會破壞任何內容。

1

setName()可用於更改線程的名稱,但您必須有一些方法來確定線程應該被調用。
getAllStackTraces()將允許程序以堆棧跟蹤爲例,並使用類/方法/文件名稱作爲提示線程調用的提示。

5

消失了我的名字,我創建的所有線程。我有太多的應用程序泄漏線程,或者有線程失控。

將java當作操作系統對待越多,管理起來就越容易。 :)

1

這引發線程命名約定最佳做法的問題。在這方面我沒有看到任何社區指導。

1

更改Java線程名稱

Thread.currentThread().setName("MyThread");