我有我的代碼:遍歷靜態套裝 - 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