page contents

volatile 问题

Pack 发布于 2020-02-19 15:42
阅读 506
收藏 0

公司中大佬写的代码我没看懂,
private volatile ConcurrentHashMap<String,String> cache = new ConcurrentHashMap<>();
有啥用呢?小伙伴们帮我解析一下

398
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;

}

请先 登录 后评论