Java 多并发之原子访问(Atomic Access)
在编程中,一个原子操作是只会出现一次的。一个原子操作在中间不会停止:要么全部发生要么一点也不发生。我们只有在原子操作完成之后才会看到原子操作的具体影响。
甚至是非常简单的表达式能够构造分解为简单操作的复杂操作。但是,你可以指定一些原子操作:
- 对于所有的引用变量和大部分的原始类型(除了long和double)变量来说读写是原子操作。
- 对于定义为了volatile 的所有变量来说读写是原子的。
原子操作不会交错执行所以没有必要担心线程冲突的问题。但是这样就说没有必要同步所有的原子操作,因为一致性错误仍然可能发生。使用volatile变量可以减少内存一致性错误,因为任何写入volatile 变量的值会被其他的读到的是相同值。这说明对volatile 变量的修改对其他线程都是可见的。而且这意味找当一个线程读取一个volatile变量的时候,这不仅仅说明可以读取针对volatile 变量的最新修改值还看到对代码的影响。
使用简单的原子变量比访问同步操作中的原来更加有效,但是这个需要程序员小心的去避免内存一致性问题。这个额外工作是否值得可是需要取决于应用的复杂性和规模了。