2016-05-30 3 views
0

ConcurrentHashMap является потокобезопасным, поэтому мы можем обновить значение карты во время итерации. но вывод ниже программы не так, как я ожидал.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 = б

8 = к

3 = д

2 = с

ожидается выход

1 = е

0 = б

8 = к

3 = д

2 = с

+0

Никто не может мне помочь? –

ответ

1

Из документации для ConcurrentHashMap.entrySet():

Итератор представления - это «слабо согласованный» итератор, который никогда не будет бросать ConcurrentModificationException и гарантирует пересечение элементов, как они существовали при построении итератора, и может (но не гарантируется) отражать любые изменения после строительства.