3

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

但是,如果我们有 2 个内核和 2 个线程并且它们并行(在完全相同的时间)调用它increment()呢?

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

底线:AtomicInteger 是否处理同步?

4

1 回答 1

3

他们是否有可能加载相同的值int i

是的,有,但它是为你处理的。

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

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

于 2020-08-17T12:04:44.133 回答