Java中的哪些操作被认为是原子的?

2022-08-31 11:44:30

Java中的哪些操作被认为是原子的?


答案 1
  • 基元类型的所有赋值,长整型和双精度型除外
  • 所有参考文献的赋值
  • 可变变量的所有赋值
  • java.concurrent.Atomic* 类的所有操作

也许还有更多。看看jls

如注释中所述,原子性并不意味着可见性。因此,当另一个线程保证不会看到部分写入时,它可能永远不会看到新值。int

长整型和双精度型的操作也是在常见的64位CPU原子上,尽管没有保证。另请参阅此功能请求


答案 2

在Java中,32位或更小数量的读取和写入保证是原子的。
通过原子,我们的意思是每个动作都在一个步骤中发生,不能被打断。因此,当我们有多线程应用程序时,读取和写入操作是线程安全的,不需要同步。

例如,以下代码是线程安全的:

public class ThreadSafe   
  {  
    private int x;  
    public void setX(int x)  
          {
           this.x = x;
           } 
  }