Was ist ein Thread-sicheres ByteArrayOutputStream?

8

Ich möchte aus den Ausgabe- und Fehlerströmen eines Prozesses lesen und sie in einen Textstrom zusammenführen. Mein Programm ist in groovy und liest sich so:

%Vor%

Das Problem ist, dass ByteArrayOutputStream nicht threadsicher ist und waitForProcessOutput () zwei Threads generiert, die an mergeStream anhängen. Gibt es eine Thread-sichere Variante, die ich verwenden kann? Wie sonst empfehlen Sie, dass ich den Zugriff auf mergeStream kontrolliere? Es sieht so aus, dass in der Praxis Zeichen manchmal mit dieser Implementierung fallengelassen werden.

    
dromodel 31.10.2012, 21:42
quelle

1 Antwort

7

Wenn für process.waitForProcessOutput() ein OutputStream als Argument verwendet wird, können Sie einfach eine benutzerdefinierte Implementierung von OutputStream verwenden, bei der alle Methoden synchronisiert sind, und an die entsprechende Methode eines umgebrochenen ByteArrayOutputStream delegieren. Genauso wie Collections.synchronizedList() eine andere Liste in einen synchronisierten Listen-Proxy einbindet.

BEARBEITEN:

Wenn wir die Quelle von ByteArrayOutputStream lesen, sind alle Methoden bereits synchronisiert, also ist es bereits Thread-sicher. Ihr Fehler kommt wahrscheinlich von woanders.

    
JB Nizet 31.10.2012, 21:50
quelle

Tags und Links