如果可以保证我将同时从/向不同区域读/写,是否可以同时读/写内存映射文件?

时间:2015-01-16 17:10:01

标签: java io real-time nio memory-mapped-files

我正在尝试用Java实现对内存映射文件的读/写访问(ONE读线程和ONE写线程)。我知道FileChannel支持并发,所以我想知道是否可以用Java中的内存映射文件做类似的事情。我可以保证我永远不会同时读写MemoryMappedBuffer的相同区域,换句话说,我将同时读取读取线程的一个区域并使用写入线程写入不同的区域。运气好吗?

1 个答案:

答案 0 :(得分:0)

如果你的线程正在访问不同的内存区域,那么永远不会有任何问题。必须注意Buffer的位置,限制和标记,这些值不得同时访问。如果限制代码仅使用基于索引的访问器方法,则没有问题。或者,您可以使用duplicate为每个线程创建一个缓冲区,以具有独立的线程本地位置和限制。

您还可以使用positionlimitslice的组合来创建缓冲区,强制执行这些缓冲区以覆盖原始缓冲区的不同区域。它们也将具有独立的位置和限制,因此,一旦确保它们不重叠并且每个缓冲区仅限于一个线程,它们将永远不会有任何竞争条件。