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?

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top