代码之家  ›  专栏  ›  技术社区  ›  Amos

java REST服务器:避免在取消某项时删除它

  •  0
  • Amos  · 技术社区  · 7 年前

    我有一个数组列表,它在类中是静态的。

    在每个请求的开头,我删除了所有过时的项: arrayList.entrySet().removeIf(entry -> entry.getValue().isObsolete()); 如果该项目超过1小时,则删除该项目。此方法是同步的。

    每个API使用列表中的一个基于参数的项。如果它在列表中,它将从中获取它,否则它将创建一个新项并将其添加到列表中。API用特定的逻辑更新项目的数据。

    如何避免在刚刚调用api y时更新api x中某个项的数据并将其删除?

    是否必须同步所有API?是否必须在每个API的开头锁定arraylist对象?有更好/更干净的方法吗?

    谢谢

    0 回复  |  直到 7 年前
        1
  •  1
  •   Rahul R.    7 年前

    首先,使用静态数组列表在服务调用之间跟踪对象并不是一个好主意。您可能需要使用Terracota或ehcache之类的工具来维护跨服务实现的缓存。这不仅可以让您不必担心您提到的同步问题,还可以提供可伸缩性以及实现的性能。

    不过,如果您仍然打算执行静态映射实现,那么可以使用collections.synchronizedList()获取映射的同步表示,并在方法中使用相同的表示。下面是一个示例用法-

    List<String> cacheList = Collections.synchronizedList(new ArrayList<String>());