`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可能会被重新使用。
因此您可以使用任何负数来满足您的要求
有没有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可能会被重新使用。
因此您可以使用任何负数来满足您的要求