java - AtomicInteger 是否处理同步?

标签 java atomic atomicinteger

如果两个线程都使用 i++ 递增相同的 int i,我们可能会遇到问题,因为 i++ 不是原子操作。这就是为什么有 AtomicInteger.increment(),它使递增原子化。因此,如果我们有 1 个核心和 2 个线程执行 .increment(),则绝对没有问题(因为它不能在操作中间暂停)。

但是如果我们有 2 个内核和 2 个线程并且它们并行(完全同时)调用 increment() 会怎么样?

他们是否有可能加载相同的 int i 值?这意味着如果 int i1,最终结果将是 2 而不是 3。在那种情况下,我们不关心它是否是原子操作,因为它们同时获得相同的值..

底线:同步是由 AtomicInteger 处理的吗?

最佳答案

Could there be possibility that they load same value of int i?

是的,有,但它已为您处理。

incrementAndGet 方法使用原子“比较和设置”操作来设置增量值但前提是尚未设置新值。如果比较失败,incrementAndGet 获取新值并重试。

最终效果是,从多个线程使用 incrementAndGet 是安全的。

关于java - AtomicInteger 是否处理同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63450177/

相关文章:

java - 如何在 Web 应用程序中查找客户端系统 MAC 地址

c - 执行原子操作的函数

concurrency - 使用单个值更新原子

c++ - 为什么标准库不以无锁方式为 8 字节以下的结构实现 std::atomic?

java - AtomicInteger 中的 "Compare And Set"如何工作

java - 防止导入 android.R

java - 为什么我的 Spring Boot Autowiring JPA 存储库未能通过 JUnit 测试?

java - 哪些 AtomicInteger 方法是测试和设置、获取和添加以及比较和交换(就无锁算法而言)?

java - 何时使用选择器以及何时使用阻塞 channel (性能)