饿汉式单例
public class SingleTon01 {
private static SingleTon01 singleTon01 = new SingleTon01();
private SingleTon01(){
//添加反射判断,防止单例被反射通过构造器破坏
if(singleTon01!=null){
throw new RunTimeException("单例模式下禁止通过反射创建实例!");
}
}
public static SingleTon01 getInstance(){
return singleTon01;
}
}
懒汉式单例
public class SingleTon02 {
private static SingleTon02 singleTon02;
private SingleTon02(){
}
public static synchronized SingleTon02 getSingleTon02(){
if(singleTon02==null){
singleTon02 = new SingleTon02();
}
return singleTon02;
}
}
DCL双重检测锁
public class SingleTon03 {
private static SingleTon03 singleTon03;
private SingleTon03(){
//添加反射判断,防止单例被反射通过构造器破坏
if(singleTon03!=null){
throw new RunTimeException("单例模式下禁止通过反射创建实例!");
}
}
public static SingleTon03 getInstance(){
//为了防止每次都进行加锁同步 首先判断是否需要初始化单例
if(singleTon03==null){
synchronized (SingleTon03.class){
//双重检测锁机制,防止其他线程阻塞在获取锁处,锁释放后造成重复创建
if(singleTon03==null){
singleTon03 = new SingleTon03();
}
}
}
return singleTon03;
}
}