我在java中有一个ByteBuffer,并且想要读取,然后有条件地修改该字节,例如,用类似的方法:原子读取然后写入Java中的一部分ByteBuffer
public void updateByte(int index) {
byte b = this.buffer.getByte(index);
if (b == someByteValue) {
this.buffer.setByte(index, someNewByte);
}
}
如何确保读取和然后修改字节发生原子?
我不想整个字节缓冲区或updateByte
方法同步,因为我想多线程,以便能够同时读/写缓冲器的不同字节(即updateByte
可以同时由多个线程作为所谓只要index
不同)。
我使用的ByteBuffer不支持byte [],所以在上面的例子中使用bb.hasArray() == false
。
,我将使用一个MappedByteBuffer从FileChannel(这是线程)创建这是真的,所以我假定映射的缓冲器会也是安全的。 – 2012-02-17 13:05:10
@戴夫 - 一个MappedByteBuffer没有连接到FileChannel用于创建它。后者仅用于为* mmap *系统调用提供参数。 – kdgregory 2012-02-17 13:46:09
您可以创建是否和使用您自己的java.util.concurrent.lock.ReadWriteLock的实例。让所有读取/写入特定“原子字节”或“原子字节区域”的代码首先为该字节/区域取出相应的锁。 :) – 2013-07-17 14:54:39