ByteBufferスレッドを安全にするためにどのようなオプションが必要ですか?位置、制限、および一部(/すべて?)のメソッドがこの内部状態に依存するため、スレッドセーフではないことが知られています。
私の目的では、複数の読み取りスレッドが安全であれば十分ですが、他の将来の訪問者のために、完全にスレッドセーフにするために知っておく必要のある技術/トリック/トラップを知りたいと思います。
私が念頭に置いていること:
- すべてのメソッドのReadWriteロックを同期または使用します。おそらく最も遅いアプローチ(?)
- ByteBufferをサブクラス化し、位置などのスレッドバインド状態を永続化しないようにします。内部状態を使用する必要があるすべてのメソッドに応じて例外をスローします。これが断食になります。しかし、トラップはありますか?(直接マップされたメモリをヒープメモリに読み込む必要があることを除いて...)
他にどのようなトリックを使用できますか?たとえば、DirectBufferを使用して「読み取り時にバイトのクローン」を実装するにはどうすればよいですか?それは可能ですか?おそらく、完全なByteBuffer(ByteBuffer.slice)をスライスすることが1つのソリューションに含まれるでしょうか?
更新:この質問で「(同期中に)複製して、同じマップされたバイトを指す新しいインスタンスを取得する」とはどういう意味ですか