page contents

volatile 问题

Pack 发布于 2020-02-07 18:44
阅读 486
收藏 0

公司中大佬写的代码我没看懂,

private volatile ConcurrentHashMap<String,String> cache = new ConcurrentHashMap<>();

有啥用呢?小伙伴们帮我解析一下

269
Pack
Pack

没办法给你评估没有上下文的问题。

这样的用法并不是没有可能,只是大部分场景下,无需volatile关键字。

下面举一个需要volatile ConcurrentHashMap<>的例子:

JVM内存中缓存用户信息,并且需要定期从redis同步最新的用户信息。
JVM内存中的用户信息用Map存储,并且由于提供了web接口,需要查询用户信息,且存在并发请求的情况,所以使用ConcurrentHashMap。

在这个场景中,用伪代码表示:

private volatile ConcurrentHashMap<String,String> cache = new ConcurrentHashMap<>();

@Scheduled(fixedRate = 5000)
public void sync(){
//从redis同步用户信息
ConcurrentHashMap<String,String> tmp = getFromRedis();
cache = tmp;
}

@GetMappping("/users")
public Map<String,String> users(){
return cache;
}

请先 登录 后评论