Thread.getId() глобальный вопрос уникальности

Если в системе работает несколько приложений Java, является ли каждый идентификатор потока уникальным по отношению ко всем другим потокам Java независимо от того, в каком приложении они работают?

Java-приложения должны быть помечены в виде песка по сравнению с другими Java-приложениями, поэтому я подумал, что возможно, чтобы конфликты Thread сталкивались.

Если идентификаторы потоков уникальны во всех приложениях, не будет ли утечка некоторой (хотя и очень незначительной) информации о других приложениях в системе? Например, сколько потоков было запущено в других приложениях или даже если другие приложения Java работают вообще?

Ответ 1

Хорошо, позвольте мне проверить источник.

В методе 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. Другими словами, ответ на ваш вопрос заключается в том, что они не являются глобально уникальными.

Ответ 2

Согласно источнику JDK, идентификатор потока уникален в данной JVM - фактически, он просто реализуется как последовательность выполнения.

Здесь метод nextThreadID() из 1.6.0_10:

private static synchronized long nextThreadID() {
    return ++threadSeqNumber;
}

(вероятно, на самом деле существует длинная ошибка переполнения, по-видимому, это никогда не происходило)