java - 为什么在 java.io.InputStream 中只有 mark() 和 reset() 方法同步?

标签 java synchronization

不明白为什么 mark() 和 reset() 是同步的,为什么 read() 不是?

最佳答案

java.io.InputStream 是一个抽象类。它有一个默认的标记/重置实现,只在重置时抛出异常,告诉它不受支持,因此不支持它的子类不需要编写自己的方法来抛出异常。 "synchronized"在默认情况下没有用,抛出异常。

任何支持它的子类都必须重写这些方法,并且同步不会被继承,因此被重写的方法可能同步也可能不同步。

我认为没有任何影响。

我想这是一个没有后果的设计缺陷,或者它可能是一个警告,所以程序员将它子类化以同步这些方法,因为它应该那样做。

关于java - 为什么在 java.io.InputStream 中只有 mark() 和 reset() 方法同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775004/

相关文章:

java - 如何使在 Java 中阻塞的函数超时?

java - synchronized 是否像 Lock.lock() 那样停放并发线程?

java - 这种不同步的对象池实现是否良好/安全?

java - ListView 选择模型的 validator ?

java - Java 中的 'this' : How does it work?

java - Jetty Servlet 不运行——而是获取目录列表

java - 为什么在 Java 中从实例方法写入静态字段不好?

java - 如何根据用户的请求暂停和恢复多个 Java 线程?

java - 并行化异构任务的局限性

java - 通过资源 ID 获取 String 时出现 Resource$NotFoundException