命名执行器服务的线程和线程池

假设我有一个应用程序,它利用了这个框架。Executor

Executors.newSingleThreadExecutor().submit(new Runnable(){
    @Override
    public void run(){
        // do stuff
    }
}

当我在调试器中运行此应用程序时,将创建一个具有以下(默认)名称的线程:。正如你所看到的,这并不是非常有用,据我所知,该框架没有提供一种简单的方法来命名创建的线程或线程池。Thread[pool-1-thread-1]Executor

那么,如何为线程/线程池提供名称呢?例如。Thread[FooPool-FooThread]


答案 1

番石榴几乎总是有你需要的东西

ThreadFactory namedThreadFactory = 
  new ThreadFactoryBuilder().setNameFormat("my-sad-thread-%d").build()

并将其传递给您的 .ExecutorService


答案 2

你可以为 newSingleThreadScheduledExecutor(ThreadFactory threadFactory) 提供一个 ThreadFactory工厂将负责创建线程,并能够命名它们。

引用Javadoc的话

创建新线程

使用 创建新线程。如果未以其他方式指定,则使用 a,这将创建线程,使其全部处于相同且具有相同的优先级和非守护程序状态。通过提供不同的 ,您可以更改线程的名称、线程组、优先级、守护程序状态等。如果在 通过返回 null 从 询问时未能创建线程,则执行程序将继续,但可能无法执行任何任务ThreadFactoryExecutors.defaultThreadFactory()ThreadGroupNORM_PRIORITYThreadFactoryThreadFactorynewThread


推荐