小编Sha*_*awn的帖子

并发哈希图中 cmputeIfAbsent 的原子性意味着什么?原子性与同步

我知道周围有很多问题computeIfAbsent

具体来说,我正在寻找的是理解并发哈希映射的原子性声明。

来自JavaDoc

整个方法调用都是原子执行的,因此每个键最多应用该函数一次。

如果两个线程尝试computeIfAbsent使用不同的键执行,并发现在这两种情况下映射都不包含它们,如果缺少函数,计算结果的执行是否可能是并发的?我知道如果两个线程都尝试添加相同的密钥,它们将不会并发。

使用了“原子”一词,并且提到这意味着每个键最多应用一次。但没有具体提及该方法的同步行为。

作为旁注,这与我相关,因为由computeIfAbsent调用的方法修改然后使用其主体中的类的字段。*

我想了解两个不同键的computeIfAbsent 方法的两个不同线程执行是否会导致线程问题。

本质上,我必须考虑同步对字段变量的访问及其在我调用的computeIfAbsent 方法中的后续使用。

*( 调用的computeIfAbsent方法是修改字段的唯一方法。除了来自哈希映射computeIfAbsent方法的调用之外,没有该方法的其他调用者。只有一个调用computeWithAbsent方法的并发哈希映射实例调用有问题的“原子”方法)

我的字段是不稳定的,以避免原子可见性的潜在问题。

java multithreading

5
推荐指数
1
解决办法
195
查看次数

标签 统计

java ×1

multithreading ×1