【问题标题】:giving names to threads used by apache httpcomponents为 apache httpcomponents 使用的线程命名
【发布时间】:2014-02-28 21:26:35
【问题描述】:

我正在使用 httpcomponents 4.3.3 发布帖子。我想命名它使用的线程,以便我可以在线程转储中轻松查看它们。是否可以?我看到有一种方法可以将 HttpClient 包装在 FutureRequestExecutionService 中,并给它一个 ThreadFactory 来提供命名线程。还有其他选择吗?我目前正在像这样创建我的 HttpClient:

httpClient = HttpClients.custom().setRetryHandler(requestRetryHandler).build();

【问题讨论】:

  • 我没有看到任何线程产生。你能说得更具体点吗?
  • 我会尝试发布跟踪
  • 同时使用异步 http 客户端和 http 组件。看起来 http 组件不会像异步 http 客户端那样产生线程(我把这两者混淆了),所以使用一个 Executor 和一个命名线程的 ThreadFactory 确实可以解决它。

标签: java multithreading apache-httpcomponents


【解决方案1】:

java.lang.Thread 有一个setName() 方法。如果你想命名的线程继承了Thread,你可以在上面调用setName("myThread")

编辑: 根据这个建议,Alper Akture 能够找到一个实际的解决方案。

ExecutorService 有一个接受ThreadFactory 的构造函数,并且可以告诉ThreadFactory 创建命名线程。

【讨论】:

  • 使用 OP 所指的库,他们无法直接控制线程的创建。
  • 我想这确实可行。但我没有引用线程来命名它。我实际上使用的是执行器,番石榴有一个 ThreadFactoryBuilder,我将使用它来创建一个带有命名线程的池,例如: ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("MyHttpClient.thread-%d").build() ; ExecutorService executorService = Executors.newSingleThreadExecutor(namedThreadFactory);
  • 所以您将我的答案标记为解决方案。这是否意味着您找到了直接访问线程的方法?
  • 不,但是在我上面的评论中, ExecutorService 有一个构造函数,它接受一个 ThreadFactory 并使用它来(如果你告诉它)使用命名线程。因此,从本质上讲,这与我想的您的答案相同。我只是没有办法直接了解线程,这是我的主要问题。
  • 您能否编辑我的答案(或添加您自己的答案)以显示您使用的代码,以便其他搜索类似解决方案的人可以看到您是如何实现的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多