2016-04-01 17 views
1

私は嵐で新しいです、私は嵐の単語カウントの例を通過していた。ここに私の理解からカウントを追跡し、ボルトこの単語数はどのように安全ですか?

public static class WordCount extends BaseBasicBolt { 
    Map<String, Integer> counts = new HashMap<String, Integer>(); 

    @Override 
    public void execute(Tuple tuple, BasicOutputCollector collector) { 
     String word = tuple.getString(0); 
     Integer count = counts.get(word); 
     if (count == null) 
     count = 0; 
     count++; 
     counts.put(word, count); 
     collector.emit(new Values(word, count)); 
    } 

    @Override 
    public void declareOutputFields(OutputFieldsDeclarer declarer) { 
     declarer.declare(new Fields("word", "count")); 
    } 
    } 

は、嵐が並行して実行ボルトのために複数のスレッドを起動しているので、どのようにここではスレッドセーフをHashMapの使用していますか?

答えて

4
+0

ので、その場合には、実行中のハッシュマップの複数のインスタンスがあるのですか?キーのすべてではなく、値が1か所に存在しますか? – Dude

+0

はい、あります。トポロジの説明で '.fieldsGrouping(" split "、新しいFields(" word "))'のために、各単語は単一のボルトにしか現れません。 –

関連する問題