【发布时间】:2013-06-06 18:08:32
【问题描述】:
我使用MappedByteBuffers通过 volatile 变量实现文件的读取者和写入者之间的线程安全(写入者更新位置,读取者读取写入者的位置)(这是一个文件上传系统,传入的文件是一个流,如果这很重要)。显然,还有更多技巧(稀疏文件,二次映射增长的力量),但归根结底就是这样。
我找不到更快的方法来写入文件,同时读取相同的文件而不将其完全缓存在内存中(由于剪切大小,我无法这样做)。
是否有任何其他 IO 方法可以保证读取器在同一进程中写入字节的可见性? MappedByteBuffer 通过 Java 内存模型间接地做出保证,我希望任何其他解决方案都能做到这一点(阅读:非平台特定等等)。
这是最快的方法吗?我在文档中遗漏了什么吗?
【问题讨论】:
-
对于直接 ByteBuffer 和 JMM 真的有任何正式的保证吗?
-
zhong.j.yu,Volatile 读取发出适当的内存屏障,MBB 直接写入内存。我无法找到它的正式文档,但它遵循核心规则。
标签: java multithreading concurrency io bytebuffer