您的位置:首页 > 编程语言 > Java开发

原子访问(Atomic Access)

2016-07-05 23:38 387 查看
在编程中,原子操作是指在一次发生中生效。一个原子操作不能在中途停止:它要么完整发生,要么不发生。没有副作用的原子操作是可见的,直到完成。

我们见过自增表达式了,如c++,并不是原子操作,甚至非常简单的表达式会定义复杂的操作,这些可以被分解为其它的操作。有一些操作可以确认是原子操作,如:

对引用类型变量和大部分基本类型变量(除long和double)的读、写是原子的

所有声明为volatile变量的读和写都是原子的

原子操作不会被交错,所以不用担心使用他们时发生线程冲突。然而,这并不能消除所有原子操作同步的需求,因为内存一致性错误还是会发生,使用volatile变量可以降低内存一致性错误发生的风险,因为任何对volatile变量写操作都会和后续读操作建立现行发生行为关系。甚至,它还意味着当一个线程读一个volatile变量,它看到的不仅仅是最新的变化,而且看到引发变化代码的负作用。

使用简单原子变量访问比通过同步代码块访问这些变量更高效,但是需要程序员更加仔细以防止内存一致性错误发生,是否值得花费精力依赖于应用规模和复杂度。

在java.util.concurrent包中的一些类提供了原子方法,不在依赖同步方法,我们将会在高级并发章节讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java atomic access