【发布时间】:2014-10-21 21:13:21
【问题描述】:
我想实现一个线程安全的队列映射。
我打算从一张空地图开始。如果键不存在,我想用一个新的队列创建一个新的 Map 条目。如果密钥确实存在,我想添加到队列中。我建议的实现如下:
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
public class StackOverFlowExample {
private final Map<String, ConcurrentLinkedQueue<String>> map = new ConcurrentHashMap<>();
public void addElementToQueue(String key, String value){
if (map.containsKey(key)){
map.get(key).add(value);
}
else{
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
queue.add(value);
map.put(key, queue);
}
}
}
我担心的是,当多个线程尝试向 Map 添加新值时,第一个线程会将新的 Map 条目与新的 Queue 放在一起,第二个将等待,然后为 key 放置一个新的队列,而不是而不是添加到队列中。我的并发/并发 API 知识充其量是微不足道的。也许并发是就地避免这种情况?建议将不胜感激。
【问题讨论】:
标签: java multithreading queue concurrenthashmap