我需要從線程池中創建一個線程,並且需要傳遞一個任務ID - 作爲線程名稱保存在我的Runnable
對象中的唯一ID。任務ID作爲線程池中的線程名稱
我查看了ThreadFactory
接口,但是因爲我無法將任何其他參數作爲線程名稱傳遞給創建的線程。另外,我看了一下課。它使用AtomicInteger
來設置線程名稱。
我可以將任意字符串傳遞給工廠,並讓它使用該字符串作爲所創建線程的名稱?
我需要從線程池中創建一個線程,並且需要傳遞一個任務ID - 作爲線程名稱保存在我的Runnable
對象中的唯一ID。任務ID作爲線程池中的線程名稱
我查看了ThreadFactory
接口,但是因爲我無法將任何其他參數作爲線程名稱傳遞給創建的線程。另外,我看了一下課。它使用AtomicInteger
來設置線程名稱。
我可以將任意字符串傳遞給工廠,並讓它使用該字符串作爲所創建線程的名稱?
您可以設置線程執行你的任務是名稱:
class YourTask implements Runnable {
public void run() {
Thread.currentThread().setName(getTaskId());
//.. rest of the code for the task
}
}
這可能是你想要的呢。由線程池創建的線程可能用於執行許多不同的任務 - 因此給線程一個取決於它最終將運行的任務的名稱是不可能的。
是的,這不可能不是因爲開發者懶惰,而是因爲這是一個壞主意。讓我改述一下:**糟糕的想法**。 – 2012-08-15 06:32:52
我認爲手動設置線程池上調度的每個線程上的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();
}
創建的'Threads'不是爲自己的任務;他們是爲工人。 – oldrinb 2012-08-15 05:55:46