1.单例模式:
Ⅰ 懒汉式-线程不安全:
public class SingleTon {
private static SingleTon singleTon;
private SingleTon(){}
public static SingleTon getInstance(){
if (singleTon==null){
singleTon=new SingleTon();
}
return singleTon;
}
}
Ⅱ 饿汉式-线程安全:
public class SingleTon { private static SingleTon singleTon=new SingleTon(); private SingleTon(){} public static SingleTon getInstance(){ return singleTon; } }
Ⅲ双重校验锁-线程安全
public class SingleTon {
private volatile static SingleTon singleTon=new SingleTon();//volatile 可见性 有序性 强制加入jvm共享内存 具有可见性、有序性, getInstance()静态方法在加载时jvm 才进行初始化, singleTon=new SingleTon()分三步执行:1 分配内存 2 初始化 3 指向分配内存地址
private SingleTon(){}
public static SingleTon getInstance(){
if (singleTon==null){
synchronized (SingleTon.class){
if (singleTon==null){
singleTon=new SingleTon();
}
}
}
return singleTon;
}
}
Ⅳ静态内部类实现 :
public class SingleTon {
private SingleTon(){}
private static class SingleTonHolder{
private static final SingleTon INSTANCE=new SingleTon();//静态内部类
}
/*
* jvm 在调用getInstance()方法时才会初始化SingleTonHolder 标记为final 常量 jvm 在类编译期就完成常量初始化 而不是在类初始化时再赋值
* */
public static SingleTon getInstance(){
return SingleTonHolder.INSTANCE;
}
}
Ⅴ 枚举实现
public enum SingleTon {
INSTANCE;
}