【问题标题】:Is Java thread id unique across multiple thread pools?Java 线程 ID 在多个线程池中是否唯一?
【发布时间】:2021-05-09 10:52:36
【问题描述】:

我有多个线程池,每个线程池运行 4 个线程。每个线程根据它们提供的唯一 ID 锁定一些公共资源。我使用Thread.currentThread().getId() 作为唯一ID 来锁定和释放资源。

我在 Thread 类中读到,线程 ID 只是一个递增和分配的长数字,一旦线程终止,它也可以重用。但它没有提及任何关于它在线程池中的行为。

线程 ID 在属于不同线程池的线程中是否保证唯一?

【问题讨论】:

  • 我会这么认为。线程池只是以某种方式管理的池的集合,但最终它们只是线程,它们的 ID 应该是唯一的。
  • 没有直接关系,但您可以考虑使用Semaphores 来控制线程内对资源的访问。 Example
  • @RandyCasburn Semaphores 不适合我的用例。我锁定的资源是来自对象池的可重用对象,我必须跟踪一些统计数据,包括每个线程的内存占用情况。
  • @Divanshu - 明白了。

标签: java multithreading threadpool executorservice


【解决方案1】:

线程 ID 是唯一的;但需要注意的是,一旦线程终止,JVM 可能会重用线程 ID。

https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#getId--

【讨论】:

  • 哦,发送太快了。然后是的,再次根据 javadocs id 是唯一的(尽管一旦线程终止,它可能会被重用)。
猜你喜欢
  • 2019-04-08
  • 2020-10-20
  • 2014-12-02
  • 2016-10-20
  • 2010-11-29
  • 2011-02-09
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多