【发布时间】:2012-03-22 12:29:10
【问题描述】:
我在多线程应用程序中常用的数据结构是 ConcurrentHashMap,我想在其中保存一组共享相同键的项目。为特定键值安装第一项时会出现问题。
我一直使用的模式是:
final ConcurrentMap<KEYTYPE, Set<VALUETYPE>> hashMap = new ConcurrentHashMap<KEYTYPE, Set<VALUETYPE>>();
// ...
Set<VALUETYPE> newSet = new HashSet<VALUETYPE>();
final Set<VALUETYPE> set = hashMap.putIfAbsent(key, newSet)
if (set != null) {
newSet = set;
}
synchronized (newSet) {
if (!newSet.contains(value)) {
newSet.add(value);
}
}
是否有更好的模式来执行此操作?这甚至是线程安全的吗?内部Set 有比java.util.HashSet 更好的类吗?
【问题讨论】:
标签: java concurrent-programming concurrenthashmap