gpt4 book ai didi

Java休息服务器: avoid the removal of an item while processing it

转载 作者:行者123 更新时间:2023-12-02 10:08:09 25 4
gpt4 key购买 nike

我有一个在类中是静态的 arrayList。

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

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

如何避免出现以下情况:更新 API x 中某个项目的数据,而刚刚调用的 API y 却将其删除?

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

谢谢

最佳答案

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

尽管如此,您仍然应该打算遵循静态 Map 实现;然后使用 Collections.synchronizedList() 获取 map 的同步表示,并在您的方法中使用相同的表示。以下是示例用法 -

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

关于Java休息服务器: avoid the removal of an item while processing it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55190495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com