为什么 write(..) 方法 java.io.Writer 是同步的?

Why are the write(..) methods java.io.Writer synchronized?

我正在使用 java.io.FileWriter 将一些数据写入磁盘。 如您所知,FileWriter 扩展了 OutputStreamWriter,后者又扩展了 Writer。

当我查看 Writer 的 write(..) 时,令我惊讶的是它是同步的。

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

我很好奇为什么写入在基础 Writer class 中是同步的? 对于我的用例,我只有一个编写器线程并且完全不需要同步 writes(..) 。

我知道获取非竞争锁比竞争锁快得多。然而,让基础 Writer class 同步的整个业务对我来说并不是一个好的设计。

是否有我错过的未同步的 Writer class?

谢谢

I am curious as to why the writes are synchronized in the base Writer class?

无论您是否需要线程安全,此实现都能正常工作。这意味着它将适用于最广泛的用例。

For my use case, I only have one writer thread and have absolutely no need for writes(..) to be synchronized.

如果您每次只使用同一个线程锁定一个对象,它会非常有效地执行此操作(如果您启用了默认的偏向锁定)

Is there an un-synchronized Writer class that I have missed?

它的开销非常小,您可以在 CPU 绑定任务中进行测量,但它大约是实际写入 IO 的延迟的 1/1000。也就是说,您将无法区分您的用例。