枚举类单例
Joshua Bloch的《effective java》书中提到:单元素的枚举类型已经成为实现Singleton的最佳方法。
双重检查加锁方式
public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { synchronized (Singleton.class){ if(uniqueInstance == null){//进入区域后,再检查一次,如果仍是null,才创建实例 uniqueInstance = new Singleton(); } } } return uniqueInstance; } }
私有化构造器并不保险
享有特权的客户端可以借助AccessibleObject.setAccessible方法,通过反射机制调用私有构造器。如果需要低于这种攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常。
直接使用枚举单例
public enum EnumSingleton { INSTANCE; public EnumSingleton getInstance() { return INSTANCE; } public static void main(String[] args) throws NoSuchMethodException, Exception { EnumSingleton e1 = EnumSingleton.INSTANCE; EnumSingleton e2 = EnumSingleton.INSTANCE; System.out.println("e1与e2是否相等" + (e1 == e2));
Constructor<EnumSingleton> constructor = EnumSingleton.class.getDeclaredConstructor(); constructor.setAccessible(true); EnumSingleton e3 = constructor.newInstance(); System.out.println("e1与e3是否相等" + (e1 == e3)); } }
链接地址:
https://www.cnblogs.com/chiclee/p/9097772.html

浙公网安备 33010602011771号