我正在使用一個ExecutorService來執行一些Callables,但是這些線程的名稱就像是fixed-pool-1-thread-1。如何更改ExecutorService中線程的名稱?
我如何更改線程的名稱?如果這是不可能的,還有另一種方法來執行Callables,我可以設置threadS的名字?
我正在使用一個ExecutorService來執行一些Callables,但是這些線程的名稱就像是fixed-pool-1-thread-1。如何更改ExecutorService中線程的名稱?
我如何更改線程的名稱?如果這是不可能的,還有另一種方法來執行Callables,我可以設置threadS的名字?
您必須使用ExecutorService
實現,該實現允許您設置用於創建線程的ThreadFactory
1,例如ThreadPoolExecutor
。傳遞一個使用正確名稱創建線程的實例。
在commons-lang中還有一個方便的類,允許使用模式指定線程名稱:BasicThreadFactory
。這使您不必創建一個ThreadFactory
子類來提供命名行爲。
+1,對於Javadoc的引用和正確/簡潔的回答 – mre 2011-05-25 14:39:52
ThreadFactory接口有一些本地java實現嗎? – 2011-05-25 15:00:05
@Renato,唯一可訪問的庫實現來自'Executors'實用類,它不允許您提供一個名稱字符串。 – 2011-05-25 21:58:45
番石榴幾乎總是有你的東西need。 ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("my-sad-thread-%d").build()
並將其傳遞給您的ExecutorService
。
一種快速而骯髒的方式;
public void run() {
Thread.currentThread().setName(aName);
doStuff();
}
這假定您可以更改線程的運行方法。 – 2014-07-18 08:13:27
我剛纔問這個有一天 - http://stackoverflow.com/questions/6113746/naming-threads-and-thread-pools-of-executorservice – mre 2011-05-25 14:38:13
@mre,是的,它被問了很多。 – 2011-05-25 22:02:02
TL; DR回答:http://stackoverflow.com/a/9748697/231917 – zengr 2013-01-29 20:08:29