の助けを借りて 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
マップの実装として使用されます。