在多线程环境中,像 i++
这样的短手递增必须做不止一件事,因此另一个线程可以获得中间值。
让我们稍微分解一下,整数变量的速记递增由多个操作组成。首先,我们必须加载 i 的当前值,递增它,然后最后将新值存储回来。当前执行此递增的线程可能会在这三个步骤中的任何一个之间被中断,因此此操作不是原子的
我想到的解决方案:我可以在 i++
和 volatile 关键字上使用同步块(synchronized block),但是有没有更好的方法让 i++
对每个线程来说都是原子的?我试过使用 AtomicInteger 我仍然认为它在使用 i+
+ 递增简写的情况下无济于事,对吗?
最佳答案
如果您满足于不使用 i++
,AtomicInteger 及其线程安全方法将起作用
不幸的是,如果你想使用 i++
,它将不是线程安全的
关于java - 如何在 Java 中使简写递增原子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163924/