En Java, la classe System.out fournit une méthode println pour imprimer des messages sur la console. Cependant, il existe une certaine ambiguïté quant à savoir si la sortie de plusieurs threads appelant cette méthode peut être entrelacée.
La documentation de l'API Java pour System.out n'indique pas explicitement s'il s'agit d'un thread- sûr ou pas. En tant que tel, on ne peut pas supposer que la sortie de plusieurs threads sera cohérente.
En théorie, il est possible que la sortie de plusieurs threads soit entrelacée. Cela peut se produire si l'implémentation sous-jacente de la machine virtuelle Java (JVM) ne garantit pas les opérations d'écriture atomique pour System.out.println. Dans de tels cas, la sortie pourrait devenir tronquée, avec des caractères de différents messages apparaissant entrecoupés.
Par exemple, considérons le code suivant :
Thread thread1 = new Thread(() -> System.out.println("ABC")); Thread thread2 = new Thread(() -> System.out.println("ABC")); thread1.start(); thread2.start();
Dans Dans cet exemple, il est possible (mais non garanti) que la sortie apparaisse entrelacée, comme suit :
AABC BC
En pratique, le comportement réel peut dépendre de l'implémentation spécifique de la JVM. Certaines JVM peuvent optimiser la classe System.out pour garantir les opérations d'écriture atomique, empêchant ainsi l'entrelacement. Cependant, cela n'est pas garanti sur toutes les plates-formes et implémentations.
Pour garantir que la sortie de plusieurs threads n'est pas entrelacée, vous pouvez appliquer manuellement l'exclusion mutuelle à l'aide du mot-clé synchronisé. Par exemple :
public synchronized void safePrintln(String s) { System.out.println(s); }
En protégeant l'objet System.out avec un verrou, cette méthode garantit qu'un seul thread peut y accéder à un moment donné. En conséquence, la sortie sera cohérente et non entrelacée.
N'oubliez pas qu'il est crucial d'utiliser cette méthode de manière cohérente tout au long de votre code. Si un thread appelle directement System.out.println, la sortie peut toujours être entrelacée.
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!