Java IO Streams中的同步方法

Ant*_*nio 25 java concurrency multithreading synchronization

在Java中,Java 1.0在类中java.io.InputStream有方法

public synchronized void mark(int readlimit) {}
Run Code Online (Sandbox Code Playgroud)

public synchronized void reset() throws IOException {
    throw new IOException("mark/reset not supported");
}
Run Code Online (Sandbox Code Playgroud)

为什么这两种方法同步而其他方法都不同步?

Ada*_*ker 6

有一些矛盾的事实表明synchronized关键字在这里只是一个错误:

  1. 当然,这只是开发人员的一个暗示.方法为空,synchronized关键字不在子类中继承.

  2. 另一方面,其他方法不同步,甚至是抽象和空方法.这意味着我们被警告不要忘记标记/重置的同步,但我们没有被警告有关并发read()调用.这没有意义,因为没有同步,并发读取将无法工作.

  3. 许多JDK流实现对同步关键字的使用不一致.

  4. java.io.InputStream被放在对面java.nio.Buffer几乎没有有用的基本方法实现,但成为一个类.因此,它试图在这个"骨架提供"和宣布一般方法合同之间取得平衡.