【问题标题】:Is it a good idea to dynamically change the names of processing threads in Java?在 Java 中动态更改处理线程的名称是个好主意吗?
【发布时间】:2011-06-05 19:22:09
【问题描述】:

我们有一个处理请求的 Java 应用程序。自然地,有一个线程池,其中的线程以一些无关紧要的名称命名,如“processor-1”、“processor-2”等。我们想知道每次收到一个名称的请求时重命名处理线程是否是个好主意这将指示正在处理哪个请求。

我感觉有些不对劲,但想不出一个好的理由。我记得有几个从线程转储分析多线程问题的案例,知道我是否在两个连续的转储中看到相同的线程对我来说非常重要。但是,我意识到我可以查看线程 ID。在 log4j 日志中,编写线程名称是一种常见的做法,我记得很多用它过滤的情况。但我仍然不确定我在这里是否有良好的“防线”。

常见的做法是什么?继续重命名线程是个好主意吗?

Renaming Threads in JavaShould threads in Java be named for easier debugging? 之类的相关问题,但它们没有解决这个具体问题。

【问题讨论】:

  • Thread.getId 确实不错。根据需要重命名线程,该信息仅用于调试,它只是 Thread 类中的 char[] name 字段。
  • 调试可以,否则不要
  • @MeBigFatGuy,除了调试/分析线程名称没有任何用途(并且不在内部使用)

标签: java multithreading


【解决方案1】:

这是个好主意。

线程名称的唯一目的是用于诊断,因此鼓励您以最好的方式命名/重命名线程,以帮助您了解运行时发生的情况。

尤其是线程池中的线程。他们的身份毫无意义。每个任务都有一个新线程在功能上等效。我们只关心任务名称,线程名称是存储任务名称的方便位置。

【讨论】:

    【解决方案2】:

    我会给每个线程一个有意义但不会动态变化的名称。

    存储有关正在处理的请求的信息听起来不错,但是将这些信息存储在线程名称中很臭。您可以记录该信息,或将其存储在ThreadLocal 中,或者...?

    【讨论】:

    • ThreadLocal 不适用于调试(至少一点都不容易)。
    • @bestsss 为什么不呢?
    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 2016-10-03
    • 2011-06-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多