Java rest服务器:避免在处理项目时删除它

Java rest服务器:避免在处理项目时删除它,java,rest,arraylist,locking,synchronized,Java,Rest,Arraylist,Locking,Synchronized,我有一个arrayList,它在类中是静态的 在每个请求的开头,我删除了所有过时的项:arrayList.entrySet.removiefentry->entry.getValue.isObsolete; 如果项目的时间超过1小时,则执行移除。此方法是同步的 每个API根据参数使用列表中的一项。如果它在列表中,它将从那里获取它,否则它将创建一个新项目并将其添加到列表中。API使用特定逻辑更新项目的数据 如何避免在API x中更新某个项的数据,而刚刚调用的API y将其删除的情况 我必须同步所有

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

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

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

如何避免在API x中更新某个项的数据,而刚刚调用的API y将其删除的情况

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


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

然而,您仍然应该打算遵循静态映射实现;然后使用Collections.synchronizedList获得地图的同步表示,并在方法中使用相同的表示。下面是一个示例用法-

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

谢谢你让我知道ehCache。在使用它时,我不需要担心API x将处理API y将删除的项?它本身就不担心吗?我想它仍然需要是静态的。我已经为ehCache添加了一个示例代码,您可能想检查一下。