3

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

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

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

4

2 回答 2

7

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

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

无论如何,这可能是您想要的。由线程池创建的线程可能用于执行许多不同的任务——因此,给线程取一个取决于它最终将运行的任务的名称是不可能的。

于 2012-08-15T05:54:04.363 回答
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();
}
于 2015-09-15T06:11:35.250 回答