Die Programmausführung ist nicht sequenziell. Warum?

8

Ich habe herumalbern mit, wie ich meine Einkapselung einrichten könnte.

Aber mein Programm wird in einer unerwarteten Reihenfolge ausgeführt. Hier ist mein eher einfacher Code:

Der "Haupt":

%Vor%

"Debug":

%Vor%

Und schließlich "Ausgabe":

%Vor%

Und die erwartete Ausgabe wäre:

Gedruckt mit schwarzer Schrift: b="true"

Gedruckt mit roter Schrift: b="true"

Wird zwischengeschaltet ...

Gedruckt mit schwarzer Schrift: Hallo

Gedruckt mit roter Schrift: Howdie

Aber ist statt der erwarteten Reihenfolge wie folgt:

Gedruckt mit schwarzer Schrift: b="true"

Wird zwischengeschaltet ...

Gedruckt mit schwarzer Schrift: Hallo

Gedruckt mit roter Schrift: b="true"

Gedruckt mit roter Schrift: Howdie

Was passiert?

BEARBEITEN: Manchmal bewegt sich die Meldung "Es wird angenommen, dass sie dazwischen ist". Ohne dass ich den Code ändere.

    
CrazyPenguin 03.02.2011, 21:27
quelle

3 Antworten

18

System.out ist gepuffert und System.err ist nicht, sie sind zwei verschiedene Streams, und einige Ihrer Nachrichten gehen an eins, einige an das andere.

Diese gemischten Nachrichten erscheinen daher möglicherweise nicht in der erwarteten Reihenfolge, da die Ausdrucke in System.out verzögert werden, bis der Puffer geleert wird (manuell oder automatisch), während diejenigen auf System.err sofort geschrieben werden sollten.

Sie können einen Stream manuell löschen, indem Sie die flush() -Methode aufrufen.

    
Mike Tunnicliffe 03.02.2011, 21:32
quelle
6

Sie drucken auf System.err und System.out . Versuchen Sie, nur auf System.out zu drucken, oder verwenden Sie System.out.flush() , um die Puffer zu löschen.

    
Alexandru 03.02.2011 21:31
quelle
4

Die Rot / Schwarz-Schreibvorgänge schreiben in zwei verschiedene Ströme: System.err bzw. System.out .

Diese Streams sind völlig unabhängig und bündig zu verschiedenen Zeiten.

Das Einzige, was garantiert ist (es sei denn, Sie verwenden mehrere Threads) ist, dass was auch immer Sie in System.out schreiben, in der gleichen Reihenfolge wie geschrieben und ebenso für System.err angezeigt wird, aber keine Garantie, wie sie sind zusammengemischt.

    
biziclop 03.02.2011 21:34
quelle

Tags und Links