Zo7*_*o72 2 java java.util.concurrent concurrent-programming
在Java中,我想做这样的事情:
Object r = map.get(t);
if (r == null) {
r = create(); // creating r is an expensive operation.
map.put(t, r);
}
Run Code Online (Sandbox Code Playgroud)
现在,代码片段可以在多线程环境中执行.
map可以是ConcurrentHashMap.
但是我如何使逻辑成为原子?
请不要像"同步"块那样给我一些简单的解决方案.我希望这个问题可以一劳永逸地解决.
它被Guava整齐地解决了.
使用CacheBuilder和调用build带一个CacheLoader.这将返回一个LoadingCache对象.如果你真的需要一个Map实现,你可以打电话asMap().
还有上了年纪MapMaker其makeComputingMap,但那是赞成的过时CacheBuilder做法.
当然你也可以手动实现它,但正确地执行它是非常重要的.需要考虑的几个方面是:
create使用相同的输入调用两次create呼叫同时发生,你希望每个呼叫者只等待与他相关的呼叫.| 归档时间: |
|
| 查看次数: |
1679 次 |
| 最近记录: |