Question

Si plusieurs applications Java sont en cours d'exécution sur un système, est à chaque thread ID unique par rapport à tous les autres threads Java, quelle que soit l'application qu'ils sont en cours d'exécution dans?

applications Java sont supposées être de sable par rapport à d'autres caissonné applications Java, donc je pense qu'il pourrait être possible pour les ID de fil pour entrer en collision.

Si les identifiants de thread sont uniques dans toutes les applications, ne sera pas cette fuite certains (bien que très faible) des informations sur d'autres applications sur le système? Tels que le nombre de threads ont commencé dans d'autres applications, ou même si d'autres applications Java sont en cours d'exécution du tout?

Était-ce utile?

La solution

Eh bien, permettez-moi de vérifier la source.

Dans la méthode Thread du init (qui est appelé par chaque constructeur):

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

En nextThreadID():

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

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

Il est jamais défini, et donc par défaut à 0.

Alors apparemment thread-numéros d'identification commencent toujours à 0 et l'incrément de 1. En d'autres termes, la réponse à votre question est qu'ils sont pas unique au monde.

Autres conseils

Selon la source JDK, un identifiant de fil est unique dans une machine virtuelle Java donnée -. En fait, il est tout simplement mis en œuvre comme une séquence de fonctionnement

Voici la méthode nextThreadID () à partir 1.6.0_10:

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

(il y a probablement fait un long bug de trop-plein là-dedans, on peut supposer qu'il n'a jamais réellement passé)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top