java 单例模式小结

来源:互联网 发布:房屋平面图设计软件 编辑:程序博客网 时间:2024/09/21 09:29
package A;/** * 懒汉模式:相比较于饥饿模式,该种模式不存在提前初始化问题,大大减小了内存的使用。 * 但是该种模式还存另一种危险--这种写法线程不安全。 * 解决办法见singlethree * @author Administrator * */public final class Single {private static Single single = null;private Single(){}public static Single getSingleInstance(){if(null==single) single=new Single();return single;}}


package A;/** * 饥饿模式:存在问题就是在没有使用前就已经初始化对象呢了,很占据内存,存在潜在的危险!! * @author Administrator * */public final class SingleTwo {private static SingleTwo singletwo=new SingleTwo();private SingleTwo(){}public static SingleTwo getsingleinstance(){return singletwo;}}

package A;/** * 同步的单例模式:该办法解决了线程安全问题。 * 但是问题又来了,这种办法大大降低了并发性。 * 继续看SingleFour * @author Administrator * */public final class SingleThree {private static SingleThree singlethree = null;private SingleThree(){}public static synchronized  SingleThree getsingleinstance(){if(singlethree==null){singlethree= new SingleThree();}return singlethree;}}

package A;/** * 双重检查锁的单例模式:该模式,既解决了线程的安全问题,也解决了并发的问题。 * 但是存在新的问题。当第一个对象正在被创建的时候,另一个线程也刚好进行判断对象是不是为空。因为穿件、、创建对象是需要时间的,这个时候这个对象的地址其实已经存在了, * 另一个线程直接取到了初始化一般的对象。。。。。。这明显不合理。 * 那有没有更好的办法呢。请看SingleFive * @author Administrator * */public final class SingleFour {private static SingleFour singlefour = null;private SingleFour(){}public static SingleFour getsingleinstance(){if(singlefour==null){synchronized (SingleFour.class) { if(null == singlefour) singlefour = new SingleFour();}}return singlefour;}}

package A;/** * 该种模式解决了以上各种问题。 * @author Administrator * */public final class SingleFive {private static class single{public final static  SingleFive singlefive= new SingleFive();} public static SingleFive getsingleinstance(){return single.singlefive;}}


0 0