防风雨螺栓的线程安全

2eafrhcq  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(268)

我有一个螺栓将收集其他螺栓的数据。一旦螺栓中有足够的数据或达到时钟,该螺栓将根据收集的数据执行一些耗时的工作。
我的问题是,在耗时的作业中,其他螺栓应该不断向此螺栓发送数据,这会导致线程安全问题吗?运行耗时作业时是否需要添加锁?
这里也有类似的帖子,但我不明白答案。
考虑到下面的单词计数螺栓,假设它只有一个示例,当一条消息到达这个螺栓时,它将立即确认。因为Map是空的,所以它将启动一个耗时的作业。与此同时,据我所知,其他喷口/螺栓仍在运行,并不断向该螺栓发送消息。但是,由于第一条消息尚未Map,这些新消息将一次又一次地启动耗时的作业。这不会导致线程安全问题吗?

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

    @Override
    public void execute(Tuple tuple) {
      collect.ack(tuple); // ack upon receiving the message
      String word = tuple.getString(0);
      Integer count = counts.get(word); 
      if (count == null){
        // doing time-consuming job here
        count = 0;
      }
      count++;
      counts.put(word, count);
      collector.emit(new Values(word, count));
    }
  }
mqxuamgl

mqxuamgl1#

防风雨螺栓是螺纹安全的(链接)。在螺栓执行时间转换操作时向螺栓发送数据是可以的。你可以在暴风用户界面中攻击你的箭的能力,如果它挣扎,就增加平行性。

相关问题