我正在阅读一些关于 Java 中原子变量的文档。正如到处都写的那样,AtomicInteger 应该是线程安全的。
根据我对原子整数的理解,它的工作原理是比较和交换算法。当两个线程尝试在完全相同的时间增加相同的原子变量时,我无法理解这将如何工作。
说我有定义AtomicInteger var = 1
,这被两个线程Thread_1
和Thread_2
. var
当两个线程同时尝试增加 时会发生什么T1
。我知道这将是罕见的情况,但如果它发生了怎么办。在比较和交换中,它在单个原子操作中读取和更新变量,并检查内存中的值。那么如果在 time T1-1
, var 的值是 5 并且两者都Thread1
将Thread2
开始递增呢?哪一个会失败?会是随机行为吗?或者我错过了一些非常基本的东西。