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