Хорошо, позвольте мне проверить источник.
В Thread
методе init
(который вызывается каждым конструктором):
/* Set thread ID */
tid = nextThreadID();
В nextThreadID()
:
private static synchronized long nextThreadID() {
return ++threadSeqNumber;
}
И
/* For generating thread ID */
private static long threadSeqNumber;
Он никогда не устанавливается, и по умолчанию равен 0.
Таким образом, очевидно, идентификаторы потоков всегда начинаются с 0 и увеличиваются на 1. Другими словами, ответ на ваш вопрос заключается в том, что они не глобально уникальны.