单例模式基本上为面试必考内容,单例模式说简单也简单,但是在面试中还是有些细节需要注意,下面提供一个懒汉的、线程安全的、避免jvm指令重排的单例书写方式,需要注意的一些点在注释中进行了说明。
public class Singleton {
private volatile static Singleton instance=null;//将单例声明为 private,避免外部访问,volatile避免指令重排
private Singleton(){//将构造函数声明为 private
}
public static Singleton getInstance(){//将返回实例的方法声明为 public,可以返回单例
if(instance==null){//第一次检查避免已有单例重复创建
synchronized(instance){
if(instance==null){//第二次检查避免多线程同时进行第一次检查重复创建
instance=new Singleton();
}
}
}
return instance;
}
}