2012-08-15 60 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(); 
}