【发布时间】:2026-01-14 19:25:01
【问题描述】:
我有一个非常愚蠢的问题。 如果我使用 AtomicReferences compareAndSet 这样
original.set(atomic.get());
long next = some new value
atomic.compareAndSet(original.get(), next);
....more code....
如果比较失败(即原子已被另一个线程更新),仍然会更新更多代码。 我试图找出作业中的错误,这是我唯一能想到的,我已经尝试了几个小时。
附: 奇怪的是,如果我在这段代码上使用同步 它在我的笔记本电脑上给了我正确的答案,但在我的桌面上却没有
【问题讨论】:
-
这是一种和其他方法一样的方法。继续执行下一条语句。如果您希望有条件地执行更多代码,请添加 if 语句。
-
您需要使用条件语句检查 compareAndSet 是否成功。见最后一节 - tutorials.jenkov.com/java-util-concurrent/atomicboolean.html
-
@MangatRaiModi 谢谢,这修复了我的代码。知道为什么这可以在我的笔记本电脑上同步但不能在 PC 上使用吗?
-
是的,它通常与循环一起使用。但单独并不能保证太多。
-
@MangatRaiModi 谢谢。是的,多亏了你们两个,我才发现了这个错误。我错误地认为这会一直尝试直到正确。您提供的书籍链接实际上是我的教科书,很好。这个网站也很棒,它实际上帮助我完成了上周关于可重入锁的作业。我也喜欢打包书。
标签: java concurrency atomic compare-and-swap