java - `Thread.getId()` 是否存在且不可能/无效的值?

标签 java multithreading

是否存在 Thread.getId() 无法返回的 long 值?拥有这样的值对于指示“无线程”或未设置的值或其他任何内容非常有用。我想我可以随机选择一个 ID,并且只有 2^64 中的 1 概率会发生这种情况,但我宁愿不这样做。

我还可以创建一个除了永远挂起之外什么也不做的线程,并将其 ID 用作无效 ID(因为无论出于何种目的,该线程都不存在,除非提供一个我确信不会出现的 ID)由另一个线程使用) - 但这似乎也有点矫枉过正。

最佳答案

一个明显的选择是无论您在哪里使用它,都保留 Long 而不是 long。然后您可以仅使用空引用来表示“无关联线程”。这是解决此问题的一个很好的通用方法。

但是,在线程的特定情况下,[Thread.getId] 1即使您需要使用long,也可以轻松实现:

Returns the identifier of this Thread. The thread ID is a positive long number generated when this thread was created. [...]

(强调我的。)

因此只需使用 -1(或任何负数)来指示无效的线程 ID。虽然这里的“正数”表明 0 也应该是无效的,但我会谨慎行事,而不是依赖它 - 当 1 表示“非负数”时,很容易写“正数”。

关于java - `Thread.getId()` 是否存在且不可能/无效的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211245/

相关文章:

java - 从 PostgreSql DB 中逐条获取记录

java - 如何修复 Eclipse 中模糊的 Swing 元素

java - 暂停功能适用于 java 6 而不是 java 7

c++ - 通过同步延长线程的生命周期 (C++11)

java - 如何将 Java ExecutorService 线程池用于正在进行的/无限的任务?

java - 无法通过其他方法更改/修改按钮背景 - JAVA

c++ - 如何使这段代码线程安全?编号++;打印值(ID);

c++ - std::thread 和右值引用

java - 中断异常与 while 循环中的 isInterrupted

java - 在线程内使用 System.exit() 后显示主线程的输出