这种方法非常简单,因为单例的实例被声明成 static 和 final 变量了,在第一次加载类到内存中时就会初始化,所以创建实例本身是线程安全的。
class Single{
private Single(){};//私有化构造函数
private static Single s = new Single();//创建私有的并静态的本类对象
public static Single getInstance(){ //创建公有的静态的对外的获取方式
return s; //返回本类对象
}
}
public class Single{
private volatile static Single s; //声明成 volatile
private Single(){};
public static Single getSingle(){
if(s == null){
synchronized(Single.class){
if(s == null){
s = new Single();
}
}
}
return s;
}
}
public class Singleton{
private static class SingletonHolder{
private static final Singleton instance = new Singleton();
}
private Singleton(){}
public static final Singleton getInstance{
return SingletonHolder.instance;
}
}