在多线程环境中,像i++
这样的短手递增必须做多件事,因此另一个线程可以得到一个中间值。
让我们稍微分解一下,整数变量的简写增量由多个操作组成。首先,我们必须加载i的当前值,增加它,然后最后将新值存储回来。执行此增量的当前线程可能在这三个步骤中的任何一个之间被中断,因此该操作不是原子的
我想到的解决方案:我可以在i++
和volatile关键字上使用同步块,但有没有更好的方法使i++
看起来像每个线程的原子?我尝试过使用AtomicInteger我仍然认为在使用+
+增加短手的情况下它不会有帮助,我是对的吗?
答案 0 :(得分:1)
i++
感到满意,可以使用AtomicInteger及其线程安全方法
不幸的是,如果你想使用i++
,它将不是线程安全的