`Thread.getId()` 是否存在 impossible/invalid 值?

Does there exist and impossible/invalid value for `Thread.getId()`?

有没有Thread.getId()不能返回的long值?拥有这样的值对于指示 "no thread" 或未设置的值或其他内容非常有用。我想我可以随机选择一个 ID,并且只有 2^64 分之一的几率让我崩溃,但我宁愿不这样做。

我还可以创建一个线程,它只会永远闲逛,并将其 ID 用作无效 ID(因为出于所有意图和目的,线程不存在,除非提供一个我确定不会的 ID' t 被另一个线程使用) - 但这似乎也有点矫枉过正。

一个明显的选择是在您使用它的任何地方保留 Long 而不是 long。然后您可以只对 "no associated thread" 使用空引用。这是一个很好的一般解决这个问题的方法。

但是,在线程的特定情况下,即使您需要使用 long:

[Thread.getId]1 也很容易

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

(强调我的。)

因此只需使用 -1(或任何负数)来指示无效的线程 ID。虽然这里的 "positive" 暗示 0 也应该是无效的,但我宁愿谨慎行事也不要依赖它 - 当一个意思是 [=29= 时,写 "positive" 太容易了].

正如 Java 文档 所说,

public long getId()

Returns 这个线程的标识符。线程 ID 是创建此线程时生成的 正长数 。线程 ID 是唯一的,并且在其生命周期内保持不变。当一个线程终止时,这个线程ID可能会被重新使用。

因此您可以使用任何负数来满足您的要求