如何给可调用线程命名?
问题内容:
我正在使用ExecutorService线程池执行Callable Object。我想给这个线程起个名字。
更具体地说,在旧版本中,我这样做了-
Thread thread = new Thread(runnable Task);
thread.setName("My Thread Name");
我在log4j日志记录中使用线程名,这在进行故障排除时会很有帮助。现在,我将代码从Java 1.4迁移到Java
1.6。我已经写了这个(下面给出)-但是我不知道如何给这个线程命名。
private final ExecutorService executorPool = Executors.newCachedThreadPool();
Future<String> result = executorPool.submit(callable Task);
请给我一些想法给这个线程命名?
问题答案:
您可以使用重载方法:
java.util.concurrent.Executors.newCachedThreadPool(ThreadFactory)
这可以让您通过
java.util.concurrent.ThreadFactory
应该允许您通过以下方式设置线程的名称java.util.concurrent.ThreadFactory.newThread(Runnable)
:
构造一个新的
Thread
。实现也可以初始化优先级,名称,守护程序状态ThreadGroup
等。
看一下java.util.concurrent.Executors.DefaultThreadFactory
默认实现。
附录
由于我看到仍在访问该线程,因此Guava(如果有)可提供 ThreadFactoryBuilder,它利用了内部匿名类的需求,甚至允许自定义线程的参数化名称。