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

如何给可调用线程命名?

钱承允
2023-03-14
问题内容

我正在使用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,它利用了内部匿名类的需求,甚至允许自定义线程的参数化名称。



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

  • 问题内容: 我有一个用C / C++编写的多线程Linux应用程序。我为线程选择了名称。为了帮助调试,我希望这些名称在GDB,“顶部”等中可见。这可能吗?如果可以,怎么办? (有很多[原因可以知道线程名称。现在我想知道哪个线程占用了50%的CPU(由“ top”报告)。在调试时,我经常需要切换到其他线程-目前,我必须做“ ”,然后浏览回溯输出的页面以找到正确的线程。 该视窗解决方案就在这里 ; 什

  • 我有2个工作线程和1个处理线程。 当处理线程正在尝试处理某些事情,而辅助线程正在执行它们的工作时,处理线程应该等待,并且在辅助线程中执行的所有作业完成时唤醒。 我怎样才能唤醒这根线?我将尝试演示我在这段伪代码中的意思 处理线程类似于 这样的事情可能发生吗?让线程等待到多个调用notifyAll()的源,而不是只等待一次。我希望我把这个问题弄清楚了。 多谢帮忙!

  • 我正在设置一个服务器(Radius)的模拟器(用于测试),它使用线程将查询发送到另一个服务器(LDAP)。查询需要以每秒x的速度执行。为此,我使用了一个带有callable的调度线程池执行器,这样我就可以创建callable并将它们提交给线程池执行。每个线程都应该打开自己的连接并使用它进行查询。问题是,每次使用连接时,我都希望相同的线程重复使用它。 澄清: 如果我有一个20个线程池,我希望创建和使

  • 问题内容: 我了解了swing是不是线程安全的。深入研究,我发现必须对事件分发线程进行任何对swing组件的修改,以防止与多线程相关的各种问题。但是,这些信息似乎完全到此为止。似乎没有一个很好的教程可以解释如何在Internet上可以访问的任何地方进行此操作。 从与其他问题有关的已发布代码中收集信息,似乎我将不得不在程序中的每个单独的swing修改周围放置一个不整洁的代码块(例如本例中的代码):

  • 问题内容: 如何使Callable线程成为守护线程? 这是我正在尝试的。我正在尝试执行一组线程,其中一个线程未完成而进入无限循环。它执行的是程序的主线程不会终止,即使所有代码语句都已执行。之后主线程进入挂起模式。 这是相同的代码段。 主程序 问题答案: 如何使Callable线程成为守护线程? 您需要使用新的创建守护程序线程。在这里查看此答案:Java中的执行器和守护程序 默认情况下,执行者在构建