AtomicInteger 是否处理同步?

Does AtomicInteger handle synchronization?

如果两个线程都使用 i++ 增加相同的 int i,我们可能会遇到问题,因为 i++ 不是原子的手术。这就是为什么有 AtomicInteger.increment(),这使得递增成为原子的。所以如果我们有 1 个核心和 2 个线程做 .increment(),那绝对没有问题(因为它不能在操作中暂停)。

但是如果我们有 2 个内核和 2 个线程并且它们并行地(完全同时)调用 increment() 会怎样?

他们是否有可能加载相同的 int i 值?这意味着如果 int i1,最终结果将是 2 而不是 3。在那种情况下,我们不关心它是否是原子操作,因为它们同时取相同的值..

底线:同步是由 AtomicInteger 处理的吗?

Could there be possibility that they load same value of int i?

是的,有,但已经为您处理了。

incrementAndGet 方法使用原子“比较和设置”操作来设置增量值 ,但前提是尚未设置新值。如果比较失败,incrementAndGet 获取新值并重试。

最终效果是,从多个线程使用 incrementAndGet 是安全的。