应用程序服务器中的 Java 并发

标签 java multithreading dictionary concurrency hashmap

我有一个带有 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/

相关文章:

java - 如何在 JSF 中设置 HtmlOutputTag 的值?

java - 使用 RestFB 时出现 Unicode 错误

作为 jsvc 运行的 Java 应用程序使用的内存比 Heap+PermGen 更多

javascript - 多线程的 node.js 版本?

C、MPI线程通信问题

Java - 将 LinkedHashMap 键/值放入相应列表的简单方法?

python - 如何按数字顺序对字典进行排序?

java - 使用 JAXB 解码 XML,其中 SOAP 信封是子元素

java - java 中无需外部工具或外部库即可记录方法调用

python - 字典中的重复项(Python)