MappedByteBuffer 与其支持的 RandomAccessFile 之间的关系

时间:2021-03-28 12:39:08

标签: java memory-mapped-files

Java 对 MappedByteBuffer 如何谈论其内容随时根据操作系统进行更改的描述。然而,没有任何关于何时以及如何发生的暗示。不过,我特别关注的是针对特定用例。假设

  • 线程 1,甚至另一个进程,只附加到随机访问文件。
  • 线程 2 在访问 MappedByteBuffer 时,比较缓冲区容量和文件的大小,如果它们不同,则获取文件的容量调整后的新 MappedByteBuffer。

问题:规范中是否有任何关于保证文件大小仅在写入数据后报告的提示?或者是否有可能在写入所有这些字节之前报告大小,例如 100 个字节,以便容量调整的缓冲区实际上看到这 100 个新字节中的陈旧数据?

问题变体:如果写入器线程在完成写入操作后将新的大小通过一个发生在线程 2 之前发生的安全方式传达给读取器线程,这是否可以保证线程 2 看到数据或者是这个操作系统依赖的?在 Java 的happens-before 保证之外?

为了实验,我做了一个 gist,虽然它对 4 字节 int 值的写入调用非常短,所以它可能只是靠运气。

0 个答案:

没有答案