我需要从线程池中创建一个线程,并且需要传递一个任务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