问题描述
如果两个线程都使用 i ++ 递增相同的int i
,我们可能会遇到问题,因为 i ++ 不是原子操作。这就是为什么AtomicInteger.increment()
使原子递增的原因。因此,如果我们有1个核心和2个线程在做.increment()
,那绝对不会有问题(因为它不能在操作过程中被挂起)。
但是,如果我们有2个内核和2个线程,并且它们并行地(在同一时间)调用increment()
怎么办?
是否有可能加载相同的int i
值?这意味着如果int i
为 1 ,则最终结果将为 2 ,而不是 3 。在那种情况下,我们不在乎它是否是原子操作,因为它们同时具有相同的值。
最重要的是:AtomicInteger处理同步吗?
解决方法
是否有可能加载相同的
int i
值?
是的,但是可以为您处理。
incrementAndGet
方法使用原子性的“比较并设置”操作来设置增量值,但前提是尚未设置新值。如果比较失败,incrementAndGet
将获取新值,然后重试。
最终结果是,可以安全地从多个线程中使用incrementAndGet
。