任务ID作为线程池中的线程名称

时间:2012-08-15 05:40:11

标签: java multithreading threadpool

我需要从线程池创建一个线程,并且需要传递一个任务ID - 一个保存在我的Runnable对象中的唯一ID - 作为线程名称。

我查看了ThreadFactory界面,但是我无法将任何其他参数作为线程名称传递给创建的线程。另外,我查看了DefaultThreadFactory课程。它使用AtomicInteger来设置线程名称。

我可以将任意字符串传递给工厂并让它使用该字符串作为创建的线程的名称吗?

2 个答案:

答案 0 :(得分:7)

您可以将执行任务的线程的名称设置为:

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

这可能是你想要的。线程池创建的线程可能用于执行许多不同的任务 - 因此为线程提供一个名称,该名称取决于它最终将运行的任务。

答案 1 :(得分: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();
}
相关问题