Ich benutze Eclipse. Wenn ich eine solche Anwendung habe:
%Vor%Die Ausgabe sieht oft so aus:
%Vor% Gibt es eine Möglichkeit, diese beiden Ausgangsströme zu synchronisieren? Natürlich ohne einige Millisekunden nach dem Block von 20 mal Hello World
zu warten und ein paar Millisekunden nach dem Drucken von ERROR
zu warten.
Wenn ein Stream zu "einer Abstraktion führt, die vom zugrunde liegenden Betriebssystem bereitgestellt wird" (z. B. ein Laufwerk oder eine Konsole), dann werden die verbleibenden Bytes "an das Betriebssystem zum Schreiben weitergegeben; es garantiert nicht, dass sie tatsächlich geschrieben werden .. . "(siehe die OutputStream-Dokumentation ). Der Schlüssel hier ist, dass das Betriebssystem Flushes von verschiedenen Streams in verschiedenen Ordnungen behandeln kann, wenn es dies wünscht.
Ich hatte das gerade in meinem Programm. Ich hatte eine Fehlermeldung zwischen zwei normalen Nachricht, die beide vor der Fehlermeldung gelöscht hatte.
Die Frage bleibt also: Gibt es eine integrierte Möglichkeit, zwei Streams zu synchronisieren? Oder müssen wir das manuell handhaben?
Für eine "ernsthafte" Verwendung schreibe ich lieber nicht direkt in System.out/System.err
, da es das Ziel fest codiert, und es verwendet auch das ziemlich schrullige PrintStream
(ist es ein Byte-Stream oder ein Zeichenstrom?) . Wenn Sie die Ausgabestreams in Ihre eigene PrintWriter
umbrechen, können Sie sie so einstellen, dass sie automatisch gespült wird - das zweite Argument im Konstruktor ist auto-flush
.
z. B.
%Vor%Siehe
Fügen Sie eine Flush hinzu, gefolgt von einer Thread.sleep(1)
, 99,9% output order wird korrekt sein.
Zum Beispiel wird dies wie erwartet angezeigt.
%Vor%Der einzige Nachteil ist der Schlaf für 1 Millisekunde, d.h. 1/1000 Sekunde
Tags und Links eclipse java synchronization stdio