Java CAS(比较和交换)工作正常吗?

Java CAS(比较和交换)工作正常吗?,java,multithreading,synchronization,thread-safety,Java,Multithreading,Synchronization,Thread Safety,对java中“比较和交换”的正确性有点怀疑,因为 例如,我仍然认为这个CAS也有可能失去价值观 允许共享资源S,值为5 线程T1和T2希望分别用新值6和7更新这些值 一,。T1将值与5进行比较,结果相同 2.T2将值与5进行比较,结果相同 3.T2将值设置为7 4.T1将该值设置为6 现在这里T2设置的值丢失了,因为T1读取了旧的电流值,当时是5 请任何人解释一下,由于CAS的原子性,您所描述的不可能发生 这不是“比较然后交换”,而是“比较和交换”。没有单独的比较阶段和交换阶段。这就是它的全部魅

对java中“比较和交换”的正确性有点怀疑,因为

例如,我仍然认为这个CAS也有可能失去价值观

允许共享资源S,值为5

线程T1和T2希望分别用新值6和7更新这些值

一,。T1将值与5进行比较,结果相同 2.T2将值与5进行比较,结果相同 3.T2将值设置为7 4.T1将该值设置为6

现在这里T2设置的值丢失了,因为T1读取了旧的电流值,当时是5


请任何人解释一下,由于CAS的原子性,您所描述的不可能发生


这不是“比较然后交换”,而是“比较和交换”。没有单独的比较阶段和交换阶段。这就是它的全部魅力。

你说的是[AtomicInteger.compareAndSet](.还有
weakCompareAndSet
确实可能失败。嗨,Kayaman,你的意思是说比较和交换总是以原子的方式发生的,没有单独的步骤吗?thnx Kayaman,我似乎错过了“CAS的原子性”这一点