java - Java IO 流中的同步方法

标签 java multithreading concurrency synchronization

在 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 关键字只是一个错误:

  1. 当然,这只是对开发人员的提示。方法为空且synchronized关键字未在子类中继承。

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

  3. 许多 JDK 流实现对同步关键字的使用不连贯。

  4. java.io.InputStreamjava.nio.Buffer 相对,几乎没有有用的基本方法实现,而是被做成了一个类。所以它试图在这种“提供骨架”和声明通用方法契约之间取得平衡。

关于java - Java IO 流中的同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33525923/

相关文章:

java - Lotus Domino 解析电子邮件地址(发件人、收件人)

multithreading - 使用 fortran dll 的线程安全 C# 服务

java - StampedLock#tryOptimisticRead() 实现

node.js - 在哪里调用 DynamoDB 实例?一次还是每个请求一次?

java - Spring 3.0.2 中如何设置请求内容类型?

java - 使用反射使用父类(super class)获取子类字段?

java - 如何通过检查将参数传递给函数

ruby - Ruby pre-1.9 和 Ruby 1.9 线程之间有什么实际区别吗?

java - 为什么这个java程序构造函数不无限继续下去?

java - 从随机持续时间获取平均值