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)
这段代码线程安全吗?如果不是那么为什么?
这将在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)
它是线程安全的,因为静态初始化和静态属性是线程安全的.它们只被初始化一次并存在于整个系统的整个生命周期中.