2012-08-15 42 views
3

我需要從線程池中創建一個線程,並且需要傳遞一個任務ID - 作爲線程名稱保存在我的Runnable對象中的唯一ID。任務ID作爲線程池中的線程名稱

我查看了ThreadFactory接口,但是因爲我無法將任何其他參數作爲線程名稱傳遞給創建的線程。另外,我看了一下​​課。它使用AtomicInteger來設置線程名稱。

我可以將任意字符串傳遞給工廠,並讓它使用該字符串作爲所創建線程的名稱?

+0

創建的'Threads'不是爲自己的任務;他們是爲工人。 – oldrinb 2012-08-15 05:55:46

回答

7

您可以設置線程執行你的任務是名稱:

class YourTask implements Runnable { 
    public void run() { 
    Thread.currentThread().setName(getTaskId()); 
    //.. rest of the code for the task 
    } 
} 

這可能是你想要的呢。由線程池創建的線程可能用於執行許多不同的任務 - 因此給線程一個取決於它最終將運行的任務的名稱是不可能的。

+0

是的,這不可能不是因爲開發者懶惰,而是因爲這是一個壞主意。讓我改述一下:**糟糕的想法**。 – 2012-08-15 06:32:52

0

我認爲手動設置線程池上調度的每個線程上的taskId並不是最優雅的方式。 您可以實現的ThreadFactory接口這樣的 -

public class NamedThreadFactory implements ThreadFactory{ 
    @Override 
    public Thread newThread(Runnable r) { 
     Thread t = new Thread(r); 
     if (r instanceof NamedRunnable) { 
      NamedRunnable namedRunnable = (NamedRunnable)r; 
      t.setName(namedRunnable.getTaskName()); 
     } 
     return t; 
    } 
} 

而且你NamedRunnable會是這樣 -

public interface NamedRunnable extends Runnable{ 
    String getTaskName(); 
}