2016-05-30 37 views
0

ConcurrentHashMap是線程安全的,因此我們可以在迭代時更新map的值。但是下面的程序輸出並不如我預期的那樣。的上面的代碼ConcurrentHashMap Iteration

Map concurrentHashMap = new ConcurrentHashMap<(); 
concurrentHashMap.put("0", "b"); 
Iterator iterator = concurrentHashMap.entrySet().iterator(); 
concurrentHashMap.put("8", "k"); 
concurrentHashMap.put("2", "c"); 
concurrentHashMap.put("3", "d"); 
concurrentHashMap.put("1", "e");   

while(iterator.hasNext()) 
{ 
    System.out.println(""+iterator.next()); 
} 

輸出是

0 = B

8 = K

3 = d

2 = C

預期輸出

1 = E

0 = B

8 = K

3 = d

2 = C

+0

沒有人可以幫我嗎? –

回答

1

ConcurrentHashMap.entrySet()的文檔:

視圖的迭代器是一個「弱一致」的迭代器,永遠不會拋出ConcurrentModificationException,並保證遍歷迭代器構造時存在的元素,並且可能(但不能保證)反映構造之後的任何修改。