/ / Por que os métodos write (..) java.io.Writer são sincronizados? - java, multithreading, file-io, io, filewriter

Por que os métodos write (..) java.io.Writer são sincronizados? - java, multithreading, file-io, io, filewriter

Eu estou usando java.io.FileWriter para gravar alguns dados no disco. Como você sabe, o FileWriter estende o OutputStreamWriter, que por sua vez estende o Writer.

Quando eu olhei para Writer "s write (..), para minha surpresa está sincronizado.

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

Estou curioso para saber por que as gravações são sincronizadas na classe base do Writer? Para o meu caso de uso, eu só tenho um thread de escritor e não tenho absolutamente nenhuma necessidade de que as gravações (..) sejam sincronizadas.

Estou ciente de que a aquisição de bloqueios não contidos é muito mais rápida que bloqueios contidos. No entanto, todo esse negócio de ter a base da classe Writer sincronizada não parece um bom design para mim.

Existe uma classe Writer não sincronizada que perdi?

obrigado

Respostas:

2 para resposta № 1

Estou curioso para saber por que as gravações são sincronizadas na classe base do Writer?

Essa implementação funcionará corretamente se você precisar que ela seja thread-safe ou não. Isso significa que ele funcionará com o maior número de casos de uso.

Para o meu caso de uso, eu só tenho um thread de escritor e não tenho absolutamente nenhuma necessidade de que as gravações (..) sejam sincronizadas.

Se você sempre bloquear um objeto usando o mesmo thread a cada vez, ele fará isso de maneira muito eficiente (se você tiver o bloqueio polarizado ativado, que é o padrão)

Existe uma classe Writer não sincronizada que perdi?

Tem uma sobrecarga muito pequena que você podemedida em tarefas ligadas à CPU, mas será em torno de 1 / 1000º o atraso da gravação real em IO. ou seja, você não será capaz de dizer a diferença para o seu caso de uso.