/ / Dlaczego metody zapisu (..) java.io.Writer są zsynchronizowane? - Java, wielowątkowość, file-io, io, filewriter

Dlaczego metody zapisu (..) są zsynchronizowane java.io.Writer? - java, wielowątkowość, plik-io, io, program do tworzenia plików

Korzystam z java.io.FileWriter, aby zapisać niektóre dane na dysku. Jak wiadomo, FileWriter rozszerza OutputStreamWriter, co z kolei rozszerza Writer.

Kiedy spojrzałem na pisarz Writer (..), ku mojemu zdziwieniu jest zsynchronizowany.

**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);
}
}

Jestem ciekawy, dlaczego zapisy są synchronizowane w podstawowej klasie Writer? W moim przypadku mam tylko jeden wątek zapisu i absolutnie nie muszę synchronizować zapisów (..).

Wiem, że uzyskiwanie blokad bez rywalizacji jest znacznie szybsze niż blokad rywalizacja. Jednak cała ta sprawa z synchronizacją podstawowej klasy Writer nie wydaje mi się dobrym projektem.

Czy brakuje mi niezsynchronizowanej klasy Writer?

Dzięki

Odpowiedzi:

2 dla odpowiedzi № 1

Jestem ciekawy, dlaczego zapisy są synchronizowane w podstawowej klasie Writer?

Ta implementacja będzie działać poprawnie, niezależnie od tego, czy jest to wątek bezpieczny, czy nie. Oznacza to, że będzie działać z najszerszym zakresem zastosowań.

W moim przypadku mam tylko jeden wątek zapisu i absolutnie nie muszę synchronizować zapisów (..).

Jeśli tylko za każdym razem blokujesz obiekt za pomocą tego samego wątku, zrobi to bardzo skutecznie (jeśli masz włączoną blokadę, która jest domyślna)

Czy brakuje mi niezsynchronizowanej klasy Writer?

Ma bardzo mały narzut, który możeszmierzy zadania związane z procesorem, ale będzie to około 1/1000 opóźnienia rzeczywistego zapisu do operacji we / wy. tzn. nie będziesz w stanie odróżnić przypadku użycia.