2009-02-26 8 views
10

Si se ejecutan varias aplicaciones Java en un sistema, ¿cada ID de subproceso es único en relación con todos los demás subprocesos Java, independientemente de la aplicación en la que se ejecutan?Pregunta de singularidad global Thread.getId()

Se supone que las aplicaciones Java están en una caja de arena en relación con otras aplicaciones Java, así que pensé que podría ser posible que las ID de subprocesos colisionen.

Si los identificadores de subprocesos son únicos en todas las aplicaciones, ¿no se filtrará alguna información (aunque muy leve) sobre otras aplicaciones en el sistema? ¿Cuántos cuántos hilos han comenzado en otras aplicaciones, o incluso si otras aplicaciones Java se están ejecutando?

+1

probablemente debería F3 en métodos en Eclipse antes de publicar ... –

Respuesta

21

Bueno, déjame ver la fuente.

En init método de la Thread 's (que es llamada por cada constructor):

/* Set thread ID */ 
tid = nextThreadID(); 

En nextThreadID():

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

Y:

/* For generating thread ID */ 
private static long threadSeqNumber; 

Nunca se establece , y por lo tanto se predetermina a 0.

Aparentemente, los números de identificación de subproceso comienzan siempre en 0 e incrementan en 1. En otras palabras, la respuesta a su pregunta es que son no globalmente únicos.

7

De acuerdo con la fuente JDK, un ID de subproceso es único en una JVM determinada; de hecho, simplemente se implementa como una secuencia de ejecución.

Aquí está el método nextThreadID() desde 1.6.0_10:

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

(es probable que haya hecho un error de desbordamiento de tiempo allí, es de suponer que nunca sucedió realmente)

+0

Sí, creo que es poco probable que cualquier sistema existente pueda ejecutar subprocesos 9223372036854775807. :) –

+0

No tiene que ejecutarlos simultáneamente ... supongamos que hay un sistema que crea un nuevo hilo cada segundo (obviamente, debe ser una agrupación de subprocesos, pero supongamos que no). Eso es solo 292471208677 años de funcionamiento continuo : P – Jared

+0

Engendrar un nuevo hilo cada milisegundo demoraría 292 277.266 milenios en desbordarse. –

Cuestiones relacionadas