com.google.common.collect.HashBiMap的文档没有说明它是否是线程安全的。我想这意味着它不是,但我想我会问,以防我错了。
问问题
6279 次
5 回答
20
HashBiMap 在内部使用多个自定义哈希表,它们不是线程安全的。您应该与以下内容同步访问HashBiMap
:
Maps.synchronizedBiMap(yourHashBiMap);
于 2013-07-26T15:19:12.267 回答
2
看看源代码,对我来说似乎不同步。
private V More ...putInBothMaps(@Nullable K key, @Nullable V value, boolean force) {
boolean containedKey = containsKey(key);
if (containedKey && Objects.equal(value, get(key))) {
return value;
}
if (force) {
inverse().remove(value);
} else {
checkArgument(!containsValue(value), "value already present: %s", value);
}
V oldValue = delegate.put(key, value);
updateInverseMap(key, containedKey, oldValue, value);
return oldValue;
}
这里delegate
和inverseMap
是它在内部使用的两个Map
s。
于 2013-07-26T15:23:57.200 回答
0
该实现基于两个哈希表。HashMap的实现是基于一张哈希表的,HashMap是不同步的。我认为假设 HashBiMap 需要外部同步是一个很好的经验法则。
于 2013-07-26T15:19:34.337 回答
0
HashBiMap 内部依赖于非线程安全的 HashMap。
于 2013-07-26T15:19:36.807 回答