Java中的哪些操作被视为原子操作?
答案 0 :(得分:92)
也许更多。查看jls。
如评论中所述,原子性并不意味着可见性。因此,虽然保证另一个线程不会看到部分写入int
,但它可能永远不会看到新值。
long和double上的操作在常见的64位CPU上atomic as well,尽管不能保证。另请参阅此feature request。
答案 1 :(得分:4)
在Java中,32位或更小数量的读写保证是原子的 原子,我们的意思是每个动作都在一个步骤中发生,不能被打断。因此,当我们有多线程应用程序时,读写操作是线程安全的,不需要进行同步。
例如,以下代码是线程安全的:
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
答案 2 :(得分:0)
根据AtomicLong.java中的此方法,似乎 long的赋值是原子的:
public final void set(long newValue) {
value = newValue;
}
请注意,没有任何同步。