Thread.getId () вопрос глобальной уникальности
Если в системе работает несколько приложений Java, является ли каждый идентификатор потока уникальным по сравнению со всеми другими потоками Java, независимо от того, в каком приложении они работают?
Приложения Java должны быть изолированы от других приложений Java, поэтому я подумал, что идентификаторы потоков могут конфликтовать.
Если идентификаторы потоков уникальны для всех приложений, не приведет ли это к утечке некоторой (хотя и очень незначительной) информации о других приложениях в системе? Например, сколько потоков запущено в других приложениях, или даже если другие приложения Java вообще выполняются?
Ответов (2)2
Что ж, позвольте мне проверить источник.
В Thread
«S 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. Другими словами, ответ на ваш вопрос заключается в том, что они не являются глобально уникальными.
Согласно источнику JDK, идентификатор потока уникален в данной JVM - фактически, он просто реализован как выполняющаяся последовательность.
Вот метод nextThreadID () из 1.6.0_10:
private static synchronized long nextThreadID() {
return ++threadSeqNumber;
}
(там, вероятно, на самом деле есть долгая ошибка переполнения, по-видимому, на самом деле этого никогда не было)