使用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

回到顶部