是否存在 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/