Java 对 MappedByteBuffer 如何谈论其内容随时根据操作系统进行更改的描述。然而,没有任何关于何时以及如何发生的暗示。不过,我特别关注的是针对特定用例。假设
问题:规范中是否有任何关于保证文件大小仅在写入数据后报告的提示?或者是否有可能在写入所有这些字节之前报告大小,例如 100 个字节,以便容量调整的缓冲区实际上看到这 100 个新字节中的陈旧数据?
问题变体:如果写入器线程在完成写入操作后将新的大小通过一个发生在线程 2 之前发生的安全方式传达给读取器线程,这是否可以保证线程 2 看到数据或者是这个操作系统依赖的?在 Java 的happens-before 保证之外?
为了实验,我做了一个 gist,虽然它对 4 字节 int 值的写入调用非常短,所以它可能只是靠运气。