Java 命名ExecutorService的线程和线程池
假设我有一个利用该Executor
框架的应用程序
Executors.newSingleThreadExecutor().submit(new Runnable(){ @Override
public void run(){
// do stuff
}
}
当我在调试器中运行此应用程序时,将使用以下(默认)名称创建一个线程:Thread[pool-1-thread-1]
。如你所见,这并不是非常有用,而且据我所知,该Executor
框架没有提供一种简便的方法来命名已创建的线程或线程池。
那么,如何为线程/线程池提供名称呢?例如,Thread[FooPool-FooThread]
。
回答:
你可以提供一个ThreadFactory
到newSingleThreadScheduledExecutor(ThreadFactory threadFactory)
。工厂将负责创建线程,并将能够为其命名。
引用Javadoc:
创建新线程
使用创建新线程ThreadFactory
。如果没有另外指定,Executors.defaultThreadFactory()
则使用a,它将创建所有线程,并且所有线程都ThreadGroup
具有相同的NORM_PRIORITY
优先级和非守护程序状态。通过提供其他参数ThreadFactory
,可以更改线程的名称,线程组,优先级,守护程序状态等。如果在ThreadFactory
从返回null时被要求创建线程失败newThread
,执行器将继续执行,但可能无法执行任何任务
以上是 Java 命名ExecutorService的线程和线程池 的全部内容, 来源链接: utcz.com/qa/431358.html