我需要从线程池创建一个线程,并且需要传递一个任务ID - 一个保存在我的Runnable
对象中的唯一ID - 作为线程名称。
我查看了ThreadFactory
界面,但是我无法将任何其他参数作为线程名称传递给创建的线程。另外,我查看了DefaultThreadFactory
课程。它使用AtomicInteger
来设置线程名称。
我可以将任意字符串传递给工厂并让它使用该字符串作为创建的线程的名称吗?
答案 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();
}