我在下面的某处读到。
Java volatile 关键字并不意味着原子,这是它的常见误解
声明 volatile 后,++
操作将是原子的,以使
您仍然需要使用原子操作来确保独占访问synchronized
Java 中的方法或块。
那么如果两个线程攻击一个线程会发生什么呢volatile
同时原始变量?
这是否意味着无论谁锁定它,都将首先设置它的值。如果与此同时,其他线程出现并读取旧值,而第一个线程正在更改其值,那么新线程不会读取其旧值吗?
Atomic 关键字和 volatile 关键字有什么区别?
的效果volatile
关键字大约是对该变量的每个单独的读取或写入操作都对所有线程原子可见。
然而,值得注意的是,需要多次读/写的操作——例如i++
,这相当于i = i + 1
,一个读一个写——是not原子的,因为另一个线程可能会写入i
读和写之间。
The Atomic
类,例如AtomicInteger
and AtomicReference
,以原子方式提供更广泛的操作,特别包括增量AtomicInteger
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)