单例设计模式
单例就是只有一个实例。也就是说一个类在全局中最多只有一个实例存在。
单例模式一般用在对实例数量有严格要求的地方,比如数据池,线程池,缓存,session回话等等。
懒汉式
//线程不安全
public class Singleton{
public static Singleton unsingleton;
private Singleton(){};
public static Singleton Instance(){
if(unsingle==null){
unsingle =new Singleton()
}else{
return unsingleton;
}
}
}
饿汉式
//线程安全的
public class Singleton {
private static Singleton unsingleton=new Singleton();
private Singleton(){}
public static Singleton Instance(){
return unsingleton;
}
}
线程安全的懒汉式
双重锁机制
public class Singleton {
private volatile 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 Singleton(){}
// 只有当类被调用时,才会加载
private static class SingletonHolder{
// 静态初始化器,由JVM来保证线程安全
private static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
枚举
public enum Singleton{
Instance;
//下面写方法什么的
//枚举是最安全的·
}