ada*_*shr 2 java concurrency multithreading
我正试图找到一种以ConcurrentHashMap原子方式对a执行多个操作的方法.
我的逻辑是这样的:
if (!map.contains(key)) {
map.put(key, value);
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
我知道有putIfAbsent方法.但如果我使用它,我仍然无法doSomethingElse原子地调用它.
除了采用同步/客户端锁定之外,还有什么方法可以做这些事情吗?
如果它有帮助,doSomethingElse在我的情况下将非常复杂,涉及创建和启动一个线程,寻找我们刚刚添加到地图的键.
如果它有帮助,在我的情况下doSomethingElse将非常复杂,涉及创建和启动一个线程,查找我们刚刚添加到地图的键.
如果是这种情况,通常需要在外部进行同步.
在某些情况下(取决于doSomethingElse()期望地图的状态,以及其他线程可能对地图执行的操作),以下内容也可能有效:
if (map.putIfAbsent(key, value) == null) {
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
这将确保只有一个线程进入doSomethingElse()任何给定的密钥.
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |