标签:初始 nbsp 类型 线程安全 call ret illegal servlet ESS
public class Singleton01 { // 私有化构造器 private Singleton01(){}; // 类加载的时候就创建实例出来 public static final Singleton01 singleton = new Singleton01(); // 全局访问点没synchronized关键字,所以效率高 public static Singleton01 getInstance(){ return singleton; } }
public class Singleton02 { private Singleton02(){}; // 先把对象引用设为null public static Singleton02 singleton = null; // 使用了synchronized关键字,所以效率不高 public static synchronized Singleton02 getInstance(){ if(singleton == null){ singleton = new Singleton02(); } return singleton; } }
public class Singleton03 { private Singleton03(){}; public static Singleton03 singleton = null; public static synchronized Singleton03 getInstance(){ if(singleton == null){ // 锁住更加精确的代码,尽量让效率提高 synchronized (Singleton03.class){ if(singleton == null){ singleton = new Singleton03(); } } } return singleton; } }
public class Singleton04 { private Singleton04(){}; private static class InnerClass{ private static final Singleton04 singleton = new Singleton04(); } public static Singleton04 getInstance(){ return InnerClass.singleton; } }
Constructor<Singleton04> constructor = Singleton04.class.getConstructor(); constructor.setAccessible(true); final Singleton04 singleton04 = constructor.newInstance();
@CallerSensitive @ForceInline // to ensure Reflection.getCallerClass optimization public T newInstance(Object ... initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { if (!override) { Class<?> caller = Reflection.getCallerClass(); checkAccess(caller, clazz, clazz, modifiers); } if ((clazz.getModifiers() & Modifier.ENUM) != 0) throw new IllegalArgumentException("Cannot reflectively create enum objects"); ConstructorAccessor ca = constructorAccessor; // read volatile if (ca == null) { ca = acquireConstructorAccessor(); } @SuppressWarnings("unchecked") T inst = (T) ca.newInstance(initargs); return inst; }
public enum Singleton05 { SINGLETON; public Singleton05 getSingleton(){ return SINGLETON; } }
标签:初始 nbsp 类型 线程安全 call ret illegal servlet ESS
原文地址:https://www.cnblogs.com/zitai/p/12219756.html