当前位置: 首页 > 面试题库 >

Java 命名ExecutorService的线程和线程池

逄俊贤
2023-03-14
问题内容

假设我有一个利用该Executor框架的应用程序

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

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

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


问题答案:

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

引用Javadoc:

创建新线程

使用创建新线程ThreadFactory。如果没有另外指定,Executors.defaultThreadFactory()则使用a,它将创建所有线程,并且所有线程都ThreadGroup具有相同的NORM_PRIORITY优先级和非守护程序状态。通过提供其他参数ThreadFactory,可以更改线程的名称,线程组,优先级,守护程序状态等。如果在ThreadFactory从返回null时被要求创建线程失败newThread,执行器将继续执行,但可能无法执行任何任务



 类似资料:
  • 主要内容:1 如何获取线程名称,2 获取线程名称的例子1 如何获取线程名称 Thread类提供了更改和获取线程名称的方法。默认情况下,每个线程都有一个名称,即thread-0,thread-1等。通过使用setName()方法,我们可以更改线程的名称。setName()和getName()方法的语法如下: public String getName():用于返回线程的名称。 public void setName(String name):用于更改线

  • 问题内容: 我有一个使用该框架的Java应用程序,并且我的代码看起来像这样 我的理解是,JVM会在内部创建5个线程的池。现在,当我在探查器中检查执行情况时,会得到类似的信息。 , 我需要一种方法来区分由我创建的和由服务器创建的 。 我在想,如果我可以命名线程池,它应该可以解决问题,但是看不到任何允许我执行此操作的API。 提前致谢。 问题答案: 您可以将自己的ThreadFactory传递给Sch

  • 本文向大家介绍java多线程CountDownLatch与线程池ThreadPoolExecutor/ExecutorService案例,包括了java多线程CountDownLatch与线程池ThreadPoolExecutor/ExecutorService案例的使用技巧和注意事项,需要的朋友参考一下 1、CountDownLatch: 一个同步工具类,它允许一个或多个线程一直等待,直到其他线

  • 问题内容: 是否可以给AsyncTask的后台线程起一个名字,就像Java中的普通线程一样: 我已经看过AsyncTask的代码,默认构造函数只是默认提供一个名称 我想这样做,因为在调试时,我想知道哪个Asynctask正在访问助手类中的方法。 问题答案: 尝试从内部调用此方法:

  • 假设我有一个Executors静态工厂方法的ExecutorService实例。 如果我从某个线程提交了一个调用,其中RetVal不是线程安全的本地实例化对象,那么当我从同一个线程获得()它时,我需要担心retvals的完整性吗?人们说局部变量是线程安全的,但我不确定当您返回一个本地实例化的对象并从其他线程接收它时,它是否适用。 下面是我的定制实现,我只是为了测试。您可以忽略EType枚举。

  • 我正在尝试运行这个简单的类,并且对于每个cicle,我正在计算java进程线程的数量。 ps huH p pid wc-l。 对于每个cicle,线程数是availableProcessors()数的增加。 当ExecutorService在其他线程中运行时,garbace收集器似乎不会释放僵尸线程。 如果我创建了一个静态ExecutorService,它就不会发生