我有一个带有 CRUD 操作的小型 Web 应用程序。对于数据,我不能使用数据库,所以我必须将其存储在 map 或类似的数据结构中。根据要求,我需要两个 map 来存储和访问数据,并且必须确保它们彼此同步。 现在的问题是,在多线程环境中对两个 map 进行增删改查操作的首选方法是什么,以确保它们处于一致的状态。是否有更好的方法或模式来避免锁定和同步?
谢谢
最佳答案
我相信必须涉及一些同步。您可以尝试以下方法。
首先,为两个映射使用 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
对象。您可以为此使用单例模式。
关于应用程序服务器中的 Java 并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646406/