根据the documentation for AsynchronousFileChannel
,
读取或写入时使用的
ByteBuffer
对于多个并发I / O操作不安全。此外,在启动I / O操作之后,应注意确保在操作完成之后才访问缓冲区。
在某种程度上,这似乎比实际需要的要严格得多。在其他方面,它似乎不够严格。特别是:
ByteBuffer
进行读取。ByteBuffer
的一部分,则您无法读取或写入相同ByteBuffer
的不相交部分。 ByteBuffer
的位置或限制。slice
的缓冲区,因为它们是两个不同的引用相同底层缓冲区的ByteBuffer
个对象。它甚至没有说明你有重叠切片的情况。这些要点是否正确?或者更准确地在其他地方指定限制?
答案 0 :(得分:0)
根据Buffer
的文档:
线程安全
多个并发线程使用缓冲区是不安全的。如果一个缓冲区要由多个线程使用,则应通过适当的同步来控制对缓冲区的访问。
由于ByteBuffer
没有显示线程安全的明确迹象,因此在异步I / O使用它时访问它可能会导致数据损坏或竞争条件。