今天讲一下单实例模式
A:
public class T1 { private T1(){} private static T1 t2 = null; public static T1 getInstance(){ if(null == t2){ t2 = new T1(); } return t2; } }
有人说A在多线程的时候会产生多个实例。于是再写一个:
B:
public class T2 { private T2(){} private static T2 t2 = null; public synchronized static T2 getInstance(){ if(null == t2){ t2 = new T2(); } return t2; } }
有人说B效率低。于是再写一个:
C:
public class T3 { private T3(){} private static T3 t2 = new T3(); public static T3 getInstance(){ return t2; } }
性能问题没有了,不过这和A不是有同样的问题吗?好吧,再写一个
D:
public class T4 { private T4(){} static class T2{ static{ System.out.println("initial inner T2"); } private static T4 t = new T4(); } public static T4 getInstance(){ return T2.t ; } }
好像还不错哦。