Maison > Java > javaDidacticiel > La sortie multithread « System.out.println » peut-elle être entrelacée ?

La sortie multithread « System.out.println » peut-elle être entrelacée ?

DDD
Libérer: 2024-12-04 17:03:11
original
997 Les gens l'ont consulté

Can Multi-threaded `System.out.println` Output Be Interleaved?

La sortie multithread System.out.println peut-elle être entrelacée ?

L'API Java pour System.out.println(String) manque des garanties de synchronisation explicites, soulevant des questions sur l'entrelacement des sorties de plusieurs threads.

La sortie peut-elle être obtenue Entrelacé ?

Sans synchronisation, il est possible que la sortie de plusieurs threads soit entrelacée. Cela signifie que les caractères de différents threads peuvent être mélangés dans une seule ligne de sortie.

Par exemple, considérons plusieurs threads exécutant le code :

System.out.println("ABC");
Copier après la connexion

Le résultat attendu devrait être :

ABC
ABC
Copier après la connexion

Cependant, l'entrelacement pourrait entraîner :

AABC
BC
Copier après la connexion

La mise en mémoire tampon empêche-t-elle Entrelacement ?

Bien que la mise en mémoire tampon et le modèle de mémoire de la VM puissent potentiellement empêcher l'entrelacement dans certains cas, on ne peut pas s'y fier. La spécification de l'API Java ne garantit pas les écritures de lignes atomiques pour System.out.println.

Assurer une sortie non entrelacée

Pour éviter l'entrelacement et garantir que la sortie est synchronisée, la synchronisation manuelle doit être appliquée. Ceci peut être réalisé en utilisant des blocs synchronisés ou en utilisant des méthodes d'impression thread-safe fournies par la bibliothèque Java.

Par exemple, le code suivant ajoute un bloc synchronisé à System.out.println :

public void safePrintln(String s) {
  synchronized (System.out) {
    System.out.println(s);
  }
}
Copier après la connexion

En utilisant cette méthode de manière cohérente tout au long du code, l'entrelacement des sorties peut être éliminé, garantissant ainsi que les lignes des différents threads restent séparées et ordonnées.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal