/ / Warum werden die Schreibmethoden java.io.Writer synchronisiert? - Java, Multithreading, File-IO, IO, Filewriter

Warum werden die write (..) Methoden java.io.Writer synchronisiert? - Java, Multithreading, Datei-io, io, Dateischreiber

Ich benutze java.io.FileWriter, um einige Daten auf die Festplatte zu schreiben. Wie Sie wissen, erweitert FileWriter OutputStreamWriter, was wiederum Writer erweitert.

Als ich mir Writers write (..) ansah, ist es zu meinem Erstaunen synchronisiert.

**java.io.Writer**

public void write(int c) throws IOException {
synchronized (lock) {
if (writeBuffer == null){
writeBuffer = new char[WRITE_BUFFER_SIZE];
}
writeBuffer[0] = (char) c;
write(writeBuffer, 0, 1);
}
}

Ich bin gespannt, warum die Schreibvorgänge in der Basisklasse Writer synchronisiert werden. Für meinen Anwendungsfall habe ich nur einen Writer-Thread und muss keine Schreibvorgänge (..) synchronisieren.

Mir ist bewusst, dass das Erwerben von nicht konkurrierenden Sperren viel schneller ist als das Erwerben von konkurrierenden Sperren. Diese ganze Sache mit der Synchronisierung der Basis-Writer-Klasse scheint mir jedoch kein gutes Design zu sein.

Gibt es eine nicht synchronisierte Writer-Klasse, die ich verpasst habe?

Vielen Dank

Antworten:

2 für die Antwort № 1

Ich bin gespannt, warum die Schreibvorgänge in der Basisklasse Writer synchronisiert werden.

Diese Implementierung funktioniert ordnungsgemäß, unabhängig davon, ob Sie Threadsicherheit benötigen oder nicht. Dies bedeutet, dass es mit den unterschiedlichsten Anwendungsfällen funktioniert.

Für meinen Anwendungsfall habe ich nur einen Writer-Thread und muss keine Schreibvorgänge (..) synchronisieren.

Wenn Sie ein Objekt immer nur mit demselben Thread sperren, wird dies sehr effizient durchgeführt (wenn Sie die voreingenommene Sperre aktiviert haben, was die Standardeinstellung ist).

Gibt es eine nicht synchronisierte Writer-Klasse, die ich verpasst habe?

Es hat einen sehr kleinen Overhead, den Sie könnenMessen Sie in CPU-gebundenen Tasks, aber es wird ungefähr 1/1000 der Verzögerung des tatsächlichen Schreibvorgangs auf E / A sein. Sie können den Unterschied für Ihren Anwendungsfall nicht feststellen.