jon*_*nto 5 java concurrency concurrenthashmap
如何在保持线程安全的同时访问多个并发数据结构?没有同步可以做到这一点吗?
举个简单的例子:
ConcurrentHashmap m;
CopyOnWriteArrayList l;
public bool enterListNode(int elem) {
Node node = l.get(elem);
String key = node.key(); //key is immutable
int val = node.val(); //val is immutable
val = m.putIfAbsent(key, val);
return val;
}
Run Code Online (Sandbox Code Playgroud)
这个例子不是线性化的,因为当我们这样做时putIfAbsent(key, val),这可能(node==l.get(elem))不再是真的.
除了添加锁之外,还有什么方法可以解决这个问题吗?
例如,如果您放入列表中的对象l从未被替换,而仅修改了对象中包含的值Node,那么您将不需要锁定。但实现起来会很棘手,因为您需要在程序开始时用空对象填充数组。
然后,从列表中检索到的所有对象将与列表中的相同,您将是安全的。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |