2017-01-06 17 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

ええ、ここにキャッチです:それを得ました: "ある時点で、または創造以来" ..ありがとう –

関連する問題