の助けを借りて IO をキャッシュしたいと思いConcurrentHashMapます。バイナリ ファイルの変更は、キャッシュにも反映されるはずです。キャッシュは複数のスレッドで使用されるため、すべての IO 操作が同期されます。マップの変更は同じsynchronizedブロック内に入ります。大まかに次のようになります。
synchronized (file) {
file.deleteRecord(index)
map.remove(index);
}
と
synchronized(file) {
file.writeRecord(index, record);
map.put(index, record);
}
mapとはどちらfileも非公開であり、キャッシュ クラスの外部からは見えません。
キャッシュ読み取り、つまりブロックmap.get(index)なしで行った場合、スレッドセーフは保持されますか?synchronized
前述したように、ConcurrentHashMapマップの実装として使用されます。