【发布时间】:2013-08-20 08:32:30
【问题描述】:
我正在尝试追踪比赛条件,所有迹象似乎都指向ConcurrentHashMap.putIfAbsent()。是否有可能如果 2 个线程在具有相同键的空映射上调用 putIfAbsent(),那么两者都可以进行查找以查看该键尚不存在,因此两个线程都尝试添加它?出于某种原因,当我第一次开始使用putIfAbsent() 时,我认为呼叫不需要同步。但是现在我看不出如果时机合适,它将如何阻止两个线程添加它们的值。我无法在生产之外重现此内容。
谢谢
【问题讨论】:
-
你能贴一个代码sn-p吗?魔鬼在细节中。
标签: java multithreading concurrency synchronization concurrenthashmap