我在下面的某处读到。
Java volatile keyword doesn't means atomic, its common misconception that after declaring volatile,
++
operation will be atomic, to make the operation atomic you still need to ensure exclusive access usingsynchronized
method or block in Java.
那么如果两个线程同时攻击一个volatile
原始变量会发生什么?
这是否意味着无论谁锁定它,都会首先设置它的值。如果与此同时,其他线程出现并在第一个线程更改其值时读取旧值,那么新线程不会读取其旧值吗?
Atomic 和 volatile 关键字有什么区别?
最佳答案
volatile
关键字的作用大致是使对该变量的每个单独的读取或写入操作对所有线程都是原子可见的。
然而,值得注意的是,一个需要不止一次读/写的操作——例如i++
,它相当于i = i + 1
,它只做一个读一写 -- 不是原子的,因为另一个线程可能在读和写之间写入 i
。
Atomic
类,如 AtomicInteger
和 AtomicReference
,以原子方式提供更广泛的操作,特别包括 AtomicInteger
。
关于java - volatile 与原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744508/