在编程中“原子”是什么意思?

在《有效Java》一书中,它指出:

语言规范保证读或写
变量为原子变量,除非变量类型为longdouble[JLS,
17.4.7]

在Java编程或一般编程的上下文中,“原子”是什么意思

下面是一个示例:假设foolong类型的变量,那么下面的操作不是原子操作(在Java中):

foo=65465498L;

实际上,变量是使用两个独立的操作写入的:一个写入前32位,另一个写入最后32位。这意味着另一个线程可能会读取foo的值,并查看中间状态

使操作原子化包括使用同步机制,以确保从任何其他线程将操作视为单个原子(即,不可拆分为部分)操作。这意味着任何其他线程,一旦操作成为原子操作,就会在赋值之前或赋值之后看到foo的值。但绝不是中间值

一种简单的方法是将https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html“rel=”noreferrer“>可变易失性:

私有易失性长foo;

或同步对变量的每次访问:

公共同步的void setFoo(长值){
this.foo=值;
}
公共同步长getFoo(){
返回此.foo;
}
//除了这两个方法之外,没有其他的foo用法,除非也是同步的

或者将其替换为AtomicLong

私有原子长foo;

发表评论