多线程如何在java中使简写递增原子化?
在一个多线程环境中,像i++
这样的快速递增需要做的事情多于一件,因此另一个线程可以得到一个中间值
让我们把它分解一下,一个整数变量的简写增量包含多个操作。首先我们必须加载i的当前值,增加它,然后最后存储新值。执行此增量的当前线程可能会在这三个步骤之间中断,因此此操作不是原子操作
我想到的解决方案是:我可以在i++
和volatile关键字上使用一个同步块,但是有没有更好的方法让i++
对每个线程来说都是原子的呢?我尝试过使用AtomicInteger,但我仍然认为它在用I+
+增加速记时不会有帮助,对吗
# 1 楼答案
如果您满足于不使用
i++
,AtomicInteger及其线程安全方法将起作用 不幸的是,如果您想使用i++
,它将不是线程安全的