在 Java 1.0 之后的类 java.io.InputStream
中有方法
public synchronized void mark(int readlimit) {}
和
public synchronized void reset() throws IOException {
throw new IOException("mark/reset not supported");
}
为什么这两个方法是同步的,而其他的都不同步?
最佳答案
这里有几个矛盾的事实表明 synchronized 关键字只是一个错误:
当然,这只是对开发人员的提示。方法为空且
synchronized
关键字未在子类中继承。另一方面,其他方法不同步,即使是抽象和空方法。这意味着我们被警告不要忘记标记/重置时的同步,但我们没有被警告并发
read()
调用。这是没有意义的,因为如果没有同步,并发读取将无法工作。许多 JDK 流实现对同步关键字的使用不连贯。
java.io.InputStream
与java.nio.Buffer
相对,几乎没有有用的基本方法实现,而是被做成了一个类。所以它试图在这种“提供骨架”和声明通用方法契约之间取得平衡。
关于java - Java IO 流中的同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33525923/