2011-05-25 65 views
7

我正在使用一個ExecutorService來執行一些Callables,但是這些線程的名稱就像是fixed-pool-1-thread-1。如何更改ExecutorService中線程的名稱?

我如何更改線程的名稱?如果這是不可能的,還有另一種方法來執行Callables,我可以設置threadS的名字?

+1

我剛纔問這個有一天 - http://stackoverflow.com/questions/6113746/naming-threads-and-thread-pools-of-executorservice – mre 2011-05-25 14:38:13

+0

@mre,是的,它被問了很多。 – 2011-05-25 22:02:02

+0

TL; DR回答:http://stackoverflow.com/a/9748697/231917 – zengr 2013-01-29 20:08:29

回答

11

您必須使用ExecutorService實現,該實現允許您設置用於創建線程的ThreadFactory1,例如ThreadPoolExecutor。傳遞一個使用正確名稱創建線程的實例。

在commons-lang中還有一個方便的類,允許使用模式指定線程名稱:BasicThreadFactory。這使您不必創建一個ThreadFactory子類來提供命名行爲。

+0

+1,對於Javadoc的引用和正確/簡潔的回答 – mre 2011-05-25 14:39:52

+0

ThreadFactory接口有一些本地java實現嗎? – 2011-05-25 15:00:05

+0

@Renato,唯一可訪問的庫實現來自'Executors'實用類,它不允許您提供一個名稱字符串。 – 2011-05-25 21:58:45

5

番石榴幾乎總是有你的東西needThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("my-sad-thread-%d").build()並將其傳遞給您的ExecutorService

3

一種快速而骯髒的方式;

public void run() { 
    Thread.currentThread().setName(aName); 
    doStuff(); 
} 
+1

這假定您可以更改線程的運行方法。 – 2014-07-18 08:13:27

相關問題