2 java concurrency immutability thread-safety
嗨
下面的课程线程安全吗?
class ImmutablePossiblyThreadsafeClass<K, V> {
private final Map<K, V> map;
public ImmutablePossiblyThreadsafeClass(final Map<K, V> map) {
this.map = new HashMap<K, V>();
for (Entry<K, V> entry : map.entrySet()) {
this.map.put(entry.getKey(), entry.getValue());
}
}
public V get(K key) {
return this.map.get(key);
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是整个类的定义,即没有其他的setter/modifier方法,那么map本身的用法是线程安全的:
final,(请注意,这只是指地图的结构 - 地图中的各个元素可能仍然不安全.)
关于在构造期间同时修改构造函数参数没有保护类的声明,我倾向于同意已经指出的其他人(包括@Bozho)
ConcurrentHashMap@Grundlefleck建议 - 我检查了源代码及其构造函数只是调用putAll(),这也没有防止这种情况),| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |