如果两个线程都使用 i++ 递增相同的 int i
,我们可能会遇到问题,因为 i++ 不是原子操作。这就是为什么有 AtomicInteger.increment()
,它使递增原子化。因此,如果我们有 1 个核心和 2 个线程执行 .increment()
,则绝对没有问题(因为它不能在操作中间暂停)。
但是如果我们有 2 个内核和 2 个线程并且它们并行(完全同时)调用 increment()
会怎么样?
他们是否有可能加载相同的 int i
值?这意味着如果 int i
是 1,最终结果将是 2 而不是 3。在那种情况下,我们不关心它是否是原子操作,因为它们同时获得相同的值..
底线:同步是由 AtomicInteger 处理的吗?
最佳答案
Could there be possibility that they load same value of
int i
?
是的,有,但它已为您处理。
incrementAndGet
方法使用原子“比较和设置”操作来设置增量值但前提是尚未设置新值。如果比较失败,incrementAndGet
获取新值并重试。
最终效果是,从多个线程使用 incrementAndGet
是安全的。
关于java - AtomicInteger 是否处理同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63450177/