设计模式:单例
- ?傳統(tǒng)的實現(xiàn)方法:兩私一公,涉及線程安全問題(即使有多重檢查鎖也可以通過反射破壞單例)
public class Singleton {private volatile static Singleton instance = null;private Singleton () {}public static Singleton getSingleton() {if(instance == null) {synchronized(Singleton.class) { if(instance == null) { instance = new Singleton(); } } } return instance; } } - JDK1.5以前
public class Singleton {private static class SingletonInstance {private static final Singleton instance = new Singleton();}private Singleton() {}public static Singleton getSingleton() {return SingletonInstance.instance; } } - ?目前最為安全的實現(xiàn)單例的方法是通過內(nèi)部靜態(tài)enum的方法來實現(xiàn),因為JVM會保證enum不能被反射并且構造器方法只執(zhí)行一次。
public class Singleton {private Singleton() {}public static Singleton getInstance() {return SingletonEnum.INSTANCE.getInstance();}private static enum SingletonEnum {INSTANCE;private Singleton singleton = null;private SingletonEnum() {singleton = new Singleton();}public Singleton getInstance() {return this.singleton;}}public static void main(String[] args) {Singleton singleton1 = Singleton.getInstance();Singleton singleton2 = Singleton.getInstance();System.out.println("singleton1==singleton2? " + (singleton1==singleton2));} }
?
轉載于:https://www.cnblogs.com/hellocyc/p/6754101.html
總結
- 上一篇: Linux常用命令汇总(持续更新中)
- 下一篇: 五菱宏光前保险杠多少钱?