我有哪些选项可以使 ByteBuffer 线程安全?众所周知,它不是线程安全的,因为它保护位置、限制和一些(/全部?)方法取决于这个内部状态。
就我的目的而言,如果多个读取线程是安全的就足够了,但对于其他未来的访问者,我想知道我需要知道哪些技术/技巧/陷阱才能使其完全线程安全。
我的想法是:
- 为所有方法同步或使用读写锁。可能是最慢的方法(?)
- 子类化 ByteBuffer 并避免持久化线程绑定状态,如位置等。并为所有需要使用内部状态的方法相应地抛出异常。这将是禁食。但是有什么陷阱吗?(除了我必须将直接映射的内存读入堆内存......)
我还能使用什么其他技巧?例如,我将如何使用 DirectBuffer 实现“读取时克隆字节”——这可能吗?一种解决方案可能会涉及对完整的 ByteBuffer (ByteBuffer.slice) 进行切片吗?
更新:这个问题的含义是“复制(同步时)以获取指向相同映射字节的新实例”