Ist multi-thread-output aus dem System.aus.println interleaved

Wenn mehrere threads Ruf-System.aus.println(String) ohne Synchronisation, können Sie die Ausgabe-interleaved? Oder ist das schreiben in jeder Zeile atomic? Die API macht keine Erwähnung der Synchronisation, so scheint dies möglich, oder ist interleaved output verhindert durch Pufferung und/oder der VM-Speicher-Modell, etc.?

EDIT:

Zum Beispiel, wenn jeder thread enthält:

System.out.println("ABC");

ist die Leistung garantiert:

ABC
ABC

oder könnte es sein:

AABC
BC
  • Immer der erste. Aber Lesen @John Vint Antwort, weil Sie wahrscheinlich nicht wollen Zeichenfolgen werden ausgespuckt, die alle über die Konsole.
  • Bedenken Sie, dass selbst wenn beide System.aus.println und System.err.println synchronisiert werden, diese beiden sind nicht zueinander synchronisiert sich also System.err.println kann interleave mit System.aus.println geben, Sie trösten, dass nicht sein kann, was Sie erwarten.
  • Eigentlich habe ich ziemlich oft erhalten, interleaved output (Ihr zeigte Fall 2), sowohl in IntelliJ Idea und Eclipse, trotz, was andere Leute Euch sagen (jdk 1.6).
  • Sehr interessant, @mucaho. Wären Sie bereit, zur post, ein Programm und Transkript als eine Antwort?
  • Leider bin ich nicht in der Lage zu extrahieren, ein kleines Beispielprogramm zu zeigen, aber ich kann link, den Sie auf einem test-Fall, der zeigt, interleaved output beim ausführen. Suchen Sie für leere Zeilen, die Zeile oberhalb (interleaved) werden die meisten sicherlich. führen Sie JNetRobust.DelayedTest. Stellen Sie sicher, dass die DEBUG - flag auf true in den ersten paar Zeilen.
  • Ja Ausgang-Mischungen mit mehreren threads

Schreibe einen Kommentar