java - 如何在 Java 中使简写递增原子?

标签 java multithreading atomic

在多线程环境中,像 i++ 这样的短手递增必须做不止一件事,因此另一个线程可以获得中间值。

让我们稍微分解一下,整数变量的速记递增由多个操作组成。首先,我们必须加载 i 的当前值,递增它,然后最后将新值存储回来。当前执行此递增的线程可能会在这三个步骤中的任何一个之间被中断,因此此操作不是原子的

我想到的解决方案:我可以在 i++ 和 volatile 关键字上使用同步块(synchronized block),但是有没有更好的方法让 i++ 对每个线程来说都是原子的?我试过使用 AtomicInteger 我仍然认为它在使用 i++ 递增简写的情况下无济于事,对吗?

最佳答案

如果您满足于不使用 i++,AtomicInteger 及其线程安全方法将起作用 不幸的是,如果你想使用 i++,它将不是线程安全的

关于java - 如何在 Java 中使简写递增原子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163924/

相关文章:

java - Java thread.stop() 是如何工作的?

cuda - atomicAdd()用于在GPU上加倍

Go atomic store 后跟 atomic load 在整个例程中表现不正常

java - 捕获 LazyInitializationException 并抛出 IllegalStateException,这是一个好主意吗?如何做?

php - 用PHP线程打开文件

java - Hibernate和数据库连接问题(JSP页面上没有显示数据)

c# - 退出没有循环的线程

java - 什么是 C++ 11 原子库等同于 Java 的 AtomicMarkableReference<T>

java - 如何在 Java 中裁剪图像?

java - Vaadin 设置背景不起作用