私はいくつかの同期が必要と考えています。次のアプローチを試すことができます。 まず、どちらのマップにもConcurrentHashMap
を使用してください。次に、両方のマップを、データが一貫性のある状態になるようにメソッドを同期させるオブジェクトにカプセル化します。
public class ParentMap {
private ConcurrentHashMap<String, Object> map1 = new ConcurrentHashMap<>();
private ConcurrentHashMap<String, Object> map2 = new ConcurrentHashMap<>();
public synchronized void add(Object objectToAdd) {
// Add to map1
// Add to map2
}
public synchronized void update(String key, Object object) {
// Update the object based on the key on both maps (following the rules of your application)
}
public synchronized void delete(String key) {
// Delete in both maps following the rules of your application
}
public Object get(String key) {
// Use the rules of your application to read
}
}
アプリケーションで唯一ParentMap
オブジェクトがあることを確認します。以下は一例です。このためにシングルトンパターンを使用することができます。
こんにちは、返信いただきありがとうございます。それも私が考えていることです。しかし、代替のロックフリーアプローチがあるのだろうかと思います。 – Imran
ロックしていないアプローチがないと思っていないと、矛盾した状態になります。データベースを使用する場合でも、背後にはいくつかのロックがあります。 mysqlをRDBMの例として使用すると、テーブルレベルのロックまたは行レベルのロックが行われます。 mongodbなどのnosqlデータベースの場合、コレクションレベルのロックまたはドキュメントレベルのロックがあります。 – Kihats