线程和同步

Nir*_*lya 0 java thread-safety

我有问题理解下面这段代码: -

public class SoCalledSigleton{

    private final static boolean allDataLoaded = SoCalledSigleton();

    private SoCalledSigleton(){

         loadDataFromDB();
         loadDataFromFile();
         loadDataAgainFromDB();

    }    
}
Run Code Online (Sandbox Code Playgroud)

这段代码线程安全吗?如果不是那么为什么?

Buh*_*ndi 5

这将在Java中创建错误.

private final static boolean allDataLoaded = SoCalledSigleton();
Run Code Online (Sandbox Code Playgroud)
  • 您将对象分配给布尔变量.
  • 您忘记添加new实例化变量.

但如果你的代码是这样的话

 public class SoCalledSigleton{

    private final static SoCalledSigleton allDataLoaded = new SoCalledSigleton();

    private SoCalledSigleton(){

         loadDataFromDB();
         loadDataFromFile();
         loadDataAgainFromDB();

    }    
}
Run Code Online (Sandbox Code Playgroud)

它是线程安全的,因为静态初始化和静态属性是线程安全的.它们只被初始化一次并存在于整个系统的整个生命周期中.