2017-01-06 3 views
-3

Почему итератор печатает разные выходные данные (связанные с отказоустойчивостью)?Почему итератор печатает разные выходные данные (связанные с отказоустойчивостью)?

public class failSafe { 

public static void main(String[] args) { 

    Map<Integer,Integer> student = new ConcurrentHashMap<>(); 
    //Defining a new HashMap 
    student.put(3, 5); 
    student.put(2,10); 
    Iterator<Integer> itr = student.keySet().iterator(); 

    while(itr.hasNext()){ 
     System.out.println(student.get(itr.next())); 
     //student.put(4,40); will print 40 also 
     student.put(1,89); 
     //will not print 89. 
    } 

`` } 

} 
+1

Почему он должен печатать 89? –

+0

@ AR.3 Ах! Виноват. Это то, что происходит, когда вы просто читаете половину содержимого. :) – user2004685

ответ

3

Итератор ConcurrentHashMap не работает без сбоев. Это weakly consistent. Это гарантирует, чтобы воздействовать на снимок элементов в момент его создания, как и Javadocs состояний:

Аналогично, итераторы, Spliterators и Перечисления вернуть элементы, отражающие состояние хеш-таблицы в некоторой точке на или с момента создания итератора/перечисления.

Это не гарантирует отражения новых элементов после его создания.

+0

Итак, вот улов: получилось: «в какой-то момент или со времени создания» .. Спасибо –