使用Java ConcurrentHashMap实现缓存
我想在Web Java应用程序中实现重量级对象的简单缓存。但是我不知道该怎么做。
我是否缺少某些东西或ConcurrentHashMap方法(putIfAbsent等)还不够,是否需要额外的同步?
是否有更好的简单API(在内存存储中,没有外部配置)来执行此操作?
P.
回答:
如果为要缓存的内容临时拥有多个实例是安全的,则可以执行“无锁”缓存,如下所示:
public Heavy instance(Object key) { Heavy info = infoMap.get(key);
if ( info == null ) {
// It's OK to construct a Heavy that ends up not being used
info = new Heavy(key);
Heavy putByOtherThreadJustNow = infoMap.putIfAbsent(key, info);
if ( putByOtherThreadJustNow != null ) {
// Some other thread "won"
info = putByOtherThreadJustNow;
}
else {
// This thread was the winner
}
}
return info;
}
多个线程可以“竞争”来创建和添加密钥项,但是只有一个应该“获胜”。
以上是 使用Java ConcurrentHashMap实现缓存 的全部内容, 来源链接: utcz.com/qa/397812.html