/**
-
懒汉式-延迟初始化占位类模式
-
是一种线程安全的单例模式,比双重检查锁要安全,因为双重检查锁在指令重排的时候会出现空指针异常,但是延迟展位类模式可以被反射修改。
*/
public class SingleInit {
private SingleInit(){}private static class InstanceHolder{
private static SingleInit instance = new SingleInit();
}public static SingleInit getInstance(){
return InstanceHolder.instance;
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
- enum 是一个什么? 本身也是一个Class类
*/
public enum EnumSingle {
/**
* instance
*/
INSTANCE;
public EnumSingle getInstance(){
return INSTANCE;
}
}
/*
利用枚举类实现单例模式,这个反射不能进行修改,是目前最安全的,一种单例模式,
*/
class Test{
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
EnumSingle instance1 = EnumSingle.INSTANCE;
Constructor<EnumSingle> declaredConstructor = EnumSingle.class.getDeclaredConstructor(String.class,int.class);
declaredConstructor.setAccessible(true);
EnumSingle instance2 = declaredConstructor.newInstance();
// NoSuchMethodException: com.kuang.single.EnumSingle.<init>()
System.out.println(instance1);
System.out.println(instance2);
}
}