Java int 并发 ++int 相当于 AtomicInteger.incrementAndGet()?

发布于 2024-08-31 12:03:22 字数 156 浏览 6 评论 0原文

这两个相等吗?换句话说,++ 和 -- 运算符是原子的吗?

int i = 0;
return ++i;

AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();

Are these two equivalent? In other words, are the ++ and -- operators atomic?

int i = 0;
return ++i;

AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

別甾虛僞 2024-09-07 12:03:22

不,++i实际上是三个指令(加载i、增量、存储在i中)。它绝对不是原子的。

No, ++i is actually three instructions (load i, increment, store in i). It's most definitely not atomic.

蓦然回首 2024-09-07 12:03:22

++ 操作在 java 中不是原子的,因为它由三个操作组成

  1. 读取存储的值(原子)
  2. 加一(原子)
  3. 存储值(原子)

中间可能会发生一些不好的事情,

因此,在 long 的情况下, 它甚至更棘手,因为即使读取操作本身也不是原子的。

我发现了一篇关于内存模型的好文章

http://www.vogella。 de/articles/JavaConcurrency/article.html#memorymodel_atomic

The ++ operation are not atomic in java, because it is composed of three operations

  1. Read the value stored (atomic)
  2. Adds one to it (atomic)
  3. Store value (atomic)

So definitively something bad can happen in between

In the case of long, it is even trickier because even the read operation itself is not atomic.

I found a nice article that talks about the memory model

http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文