首页
注册
登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请
登录
V2EX
›
Georgedoe
›
全部回复第 3 页 / 共 3 页
回复总数
42
1
2
3
❮
❯
2022-05-20 16:50:23 +08:00
回复了
agzou
创建的主题
›
Java
›
请教一个 ConcurrentHashMap 问题
在你代码里加了点 log , 这是输出 , 很显然有问题
public long nextId(String key) {
// 虽然采用了并发安全的容器,但是当 contains 语句通过后,有可能出现多线程先后 put,AtomicLong 值有可能给覆盖?
if (!map.containsKey(key)) {
AtomicLong atomicLong = new AtomicLong(0);
System.out.println("put twice");
map.put(key, atomicLong);
long l = atomicLong.incrementAndGet();
System.out.println(l);
return l;
}
return map.get(key).incrementAndGet();
}
put twice
put twice
put twice
1
1
2
2022-05-20 16:40:49 +08:00
回复了
agzou
创建的主题
›
Java
›
请教一个 ConcurrentHashMap 问题
同一个 key 有可能会被 put 多次 , 某个 key 的 contains 和 put 不是原子操作 , 可以去看看 go 的 singleflight 的实现 , 保证一次只有一个线程执行了 set (put) 操作
1
2
3
❮
❯
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
1861 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms ·
UTC 16:42
·
PVG 00:42
·
LAX 08:42
·
JFK 11:42
Developed with
CodeLauncher
♥ Do have faith in what you're doing.