Java 单例线程安全问题

public class A {
public final static A INSTANCE = new A();
private A(){}

}
这个类是不是线程安全的呢?单例能这样写吗?

这种写法是线程安全的。
但是在该类一开始被加载的时候INSTANCE = new A()就会被执行。
具体参考陈皓的博客深入浅出单实例Singleton设计模式
介绍得非常详细。

如果单线程中初始化,多线程中应用就没问题。

public class A{
private static A a=null;
private A(){}
public static synchronized A getInstance(){
if(a==null){
a = new A();
}
return a;
}

}你可以这样写,类加载的时候就不会创建a