我有哪些选项可以使ByteBuffer线程安全?已知它不是线程安全的,因为它保存了位置、限制和一些(或全部?)方法依赖于这个内部状态。
对于我的目的来说,如果多个读线程是安全的,就足够了,但是为了其他未来的访问者,我想知道我需要知道什么技巧/诀窍/陷阱才能使它完全线程安全。
我想到的:
- 对所有方法进行同步或使用ReadWrite锁。可能是最慢的方法(?)
- 子类化ByteBuffer并避免持久化线程绑定状态,如position等,并相应地为需要使用内部状态的所有方法抛出异常。这将是最快的。但是是否有任何陷阱?(除了我必须将直接映射的内存读入堆内存之外...)
我还能用什么诀窍吗?例如,我怎么实现“在读取时复制字节”与DirectBuffer-是否可能?可能会涉及到一个解决方案中的完整ByteBuffer(ByteBuffer.slice)吗?
更新:在这个问题中,“在同步时复制以获得一个指向相同映射字节的新实例”是什么意思?