单例模式-Java5种方式
单例模式
饿汉式
public class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton newInstance(){
return instance;
}
}
懒汉式
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static Singleton newInstance(){
if(null == instance){
instance = new Singleton();
}
return instance;
}
}
线程安全问题,并发调用它的getInstance()创建多个实例,可加锁解决
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static synchronized Singleton newInstance(){
if(null == instance){
instance = new Singleton();
}
return instance;
}
}
双重校验锁-懒汉式
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null) {//创建了就不用执行后面
synchronized (Singleton.class) {
if (instance == null) {//并发问题
instance = new Singleton();
}
}
}
return instance;
}
}
静态内部类-懒汉式
public class Singleton{
private static class SingletonHolder{
public static Singleton instance = new Singleton();
}
private Singleton(){}
public static Singleton newInstance(){
return SingletonHolder.instance;
}
}
利用了类加载机制来保证只创建一个instance实例
枚举
public enum Singleton{
instance;
public void whateverMethod(){}
}

浙公网安备 33010602011771号