编程中的“原子”是什么意思?
在《有效的Java》一书中,它指出:
语言规范保证读取或写入变量是原子的,除非变量的类型为 [JLS, 17.4.7]。
long
double
在Java编程或一般编程的上下文中,“原子”是什么意思?
在《有效的Java》一书中,它指出:
语言规范保证读取或写入变量是原子的,除非变量的类型为 [JLS, 17.4.7]。
long
double
在Java编程或一般编程的上下文中,“原子”是什么意思?
下面是一个示例:假设是一个类型的变量,那么下面的操作不是原子操作(在Java中):foo
long
foo = 65465498L;
实际上,该变量是使用两个单独的操作编写的:一个写入前 32 位,另一个写入最后 32 位。这意味着另一个线程可能会读取 的值,并查看中间状态。foo
使操作原子化包括使用同步机制,以确保从任何其他线程可以看到操作作为单个原子操作(即不能拆分为多个部分)。这意味着,一旦操作成为原子操作,任何其他线程都将看到赋值之前或赋值之后的值。但永远不要中间值。foo
执行此操作的一种简单方法是使变量易失性:
private volatile long foo;
或者要同步对变量的每次访问:
public synchronized void setFoo(long value) {
this.foo = value;
}
public synchronized long getFoo() {
return this.foo;
}
// no other use of foo outside of these two methods, unless also synchronized
或者用原子龙
代替它:
private AtomicLong foo;
“原子操作”是指从所有其他线程的角度来看似乎是即时的操作。当保证适用时,您无需担心部分完成的操作。