Maison >Java >javaDidacticiel >System.out.println() est-il thread-safe en Java multithread ?

System.out.println() est-il thread-safe en Java multithread ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-07 13:52:12771parcourir

Is System.out.println() Thread-Safe in Multithreaded Java?

Entrelacement System.out.println() multithread : un dilemme de sécurité des threads

La question se pose : peut-il sortir de System.out .println(String) par plusieurs threads devient entrelacé s'il n'y a pas de synchronisation ?

L'API reste silencieuse sécurité du fil, laissant place au doute. Bien qu'une sortie entrelacée soit théoriquement réalisable, la réalité peut être différente en raison de la mise en mémoire tampon, des modèles de mémoire ou de l'implémentation de la JVM.

Par exemple, si chaque thread exécute System.out.println("ABC"), on pourrait attendez-vous à ce que la sortie soit "ABCnABC", indiquant l'absence d'entrelacement. Cependant, "AABCnBC" est également plausible.

Résoudre l'énigme

La documentation de l'API ne garantit pas la sécurité des threads pour System.out, ce qui implique que l'entrelacement est possible. Néanmoins, certaines implémentations JVM peuvent utiliser des mécanismes thread-safe dans println (comme printf de la glibc), garantissant la fidélité de la sortie.

Cependant, s'appuyer sur des implémentations spécifiques à la JVM est risqué. Pour garantir une intégrité complète de la sortie, une exclusion mutuelle manuelle est nécessaire :

public void safePrintln(String s) {
  synchronized (System.out) {
    System.out.println(s);
  }
}

Notez que cela n'empêche l'entrelacement que si tout le code utilise systématiquement safePrintln et évite les appels directs à System.out.println.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn