Thread.getId () domanda unicità globale
-
09-09-2019 - |
Domanda
Se più applicazioni Java sono in esecuzione su un sistema, è ogni ID thread relativo unica per tutti gli altri thread Java, indipendentemente da quale applicazione sono in esecuzione in?
applicazioni Java dovrebbero essere sabbia-boxed rispetto ad altre applicazioni Java così ho pensato che potrebbe essere possibile per gli ID della discussione a collidere.
Se gli ID della discussione sono univoci in tutte le applicazioni, non sarà che perdita di alcune informazioni (anche se molto minore) su altre applicazioni sul sistema? Come ad esempio il numero di thread hanno iniziato in altre applicazioni, o anche se altre applicazioni Java sono in esecuzione a tutti?
Soluzione
Bene, fammi controllare la fonte.
Nel metodo Thread
del init
(che è chiamato da ogni costruttore):
/* Set thread ID */
tid = nextThreadID();
In nextThreadID()
:
private static synchronized long nextThreadID() {
return ++threadSeqNumber;
}
E
/* For generating thread ID */
private static long threadSeqNumber;
Non è mai impostato, e quindi il valore predefinito è 0.
Quindi, apparentemente filetto numeri ID iniziano sempre a 0 e l'incremento di 1. In altre parole, la risposta alla tua domanda è che sono non globalmente univoco.
Altri suggerimenti
Secondo la fonte JDK, un ID thread è univoco in ogni JVM -. Infatti, è semplicemente implementato come una sequenza di esecuzione
Ecco il metodo nextThreadID () da 1.6.0_10:
private static synchronized long nextThreadID() {
return ++threadSeqNumber;
}
(probabilmente c'è in realtà una lunga bug di overflow in là, probabilmente non è mai realmente accaduto)