我有我的代码:遍历静态套装 - java的
public static Set<Long> workItemsForTasks = new HashSet<Long>();
这是一个Web应用程序,并在代码中的用户可以添加新的项目到地图 - 而我在这样的代码添加:
WorkflowOperations.workItemsForTasks.add(workItem.getId());
一旦工作流程达到特定的代码,我圈在地图上是这样的:
Iterator workItemsIter = service.workItemsForTasksToBMS.iterator();
while (workItemsIter.hasNext()) {
workItemsIter.remove();
...
}
我的问题是:
一旦我得到迭代器 - 如果另一个用户向地图添加了一个新项目(因为它不在同一个互联网页面中) - 当我循环播放时它会影响地图吗?或者检索迭代器可以确保它保持地图大小,直到循环开始的时间?
EDITED
这是一个接受不同的Web服务调用的Web应用程序。
在调用A中,用户可能会添加我需要处理的调用B中的数据。
因此,我定义了一个singleton类(通过spring bean),它持有我需要处理的数据集(数据是数字),并且每次修改Set时我都有Web服务Call A.一旦用户请求Web服务调用B - 我必须收集迄今为止的数据并执行一些操作。
记得同时调用add()'。 – Boris 2011-03-13 08:29:38
所以我仍然需要设置workItemsForTasks = Collections.synchronizedSet(new HashSet());到集合? – Dejell 2011-03-13 11:30:11
@Odelya,是的,你应该。使用'Collections.synchronizedSet()'加上面的是线程安全的。这不是唯一的解决方案,但它很简单。 – rlibby 2011-03-13 11:39:01