嵌套的同步映射

时间:2018-03-15 12:55:00

标签: java multithreading

如何安全地将元素放入

ConcurrentMap <String, Set<Integer>> cmap = new ConcurrentMap<String, Set<Integer>>();

我在我的并发地图上操作如下:

  • 如果某个密钥不存在:请输入一个带有字符串和全新字符的条目 Set<Integer>
  • 如果存在:为此密钥添加特定的Integer Set<Integer>值。

2 个答案:

答案 0 :(得分:3)

ConcurrentMap有一种方法可以在缺少时初始化地图值。我假设内部的集合应该是线程安全的:

$(".common-class").click(function(){
    //action taken
});

在lambda之前:

Set<Integer> set = cmap.computeIfAbsent(key,(k)->  Collections.newSetFromMap(new ConcurrentHashMap<>()));

set.add(value);

答案 1 :(得分:0)

在并发环境中,您可能应该使用并发映射和并发集。例如 ccg: 'E38000016', nuts: 'UKD36' } } } events.js:136 throw er; // Unhandled 'error' event ^ Error: socket hang up at createHangUpError (_http_client.js:330:15) at TLSSocket.socketOnEnd (_http_client.js:423:23) at TLSSocket.emit (events.js:164:20) at endReadableNT (_stream_readable.js:1054:12) at _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick.js:180:9) ConcurrentHashMapCollections.newSetFromMap(new ConcurrentHashMap<>())方法可以防止ConcurrentHashMap.putIfAbsent()机制的竞争条件。

所以代码看起来像

if(!containsKey) put