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

问题描述 投票:0回答:1

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

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

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

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

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

谢谢

java rest arraylist locking synchronized
1个回答
1
投票

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

不过,您是否还打算遵循静态Map实现;然后使用Collections.synchronizedList()获取地图的同步表示,并在方法中使用相同的表示。以下是一个示例用法 -

List<String> cacheList = Collections.synchronizedList(new ArrayList<String>());
© www.soinside.com 2019 - 2024. All rights reserved.