创建模式之单列模式

来源:互联网 发布:mysql h localhost 编辑:程序博客网 时间:2024/06/05 05:10
package com.djk.design.factory.singlen;public class Single {private static Single single = new Single();private Single (){}public static Single getInstance(){return single;}}

这个单列是饿汉式的,一加载类的时候就初始化,优点是没有线程安全的问题,但是缺点是如果类初始化做的东西比较多的话会浪费资源



package com.djk.design.factory.singlen;public class Single {private static Single single;private Single (){}public static Single getInstance(){if (null == single){single = new Single();}return single;}}

这是懒汉式的单列。优点是类的初始化延时了 缺点是在多线程的坏境下可能会生成多个实例


package com.djk.design.factory.singlen;public class Single {private static Single single;private Single (){}public static synchronized Single getInstance(){if (null == single){single = new Single();}return single;}}

这是针对懒汉式的单列线程不安全而出现的,优点是线程安全的缺点是效率低。

package com.djk.design.factory.singlen;public class Single {private static Single single;private Single (){}public static synchronized Single getInstance(){synchronized (Single.class){if (null == single){synchronized (single) {single = new Single();}}}return single;}}

双重检查机制,缺点是在多线程的场景下会返回一个初始化不完整的对象



package com.djk.design.factory.singlen;public class Single {private Single (){}private  static class InnerClass{private static Single sin = new Single();}public static synchronized Single getInstance(){return InnerClass.sin;}}

  public Object readResolve() {  
        return instance;  
    }

这个方法的作用是解决单列类实现序列化的时候反序列化防止生成多个对象用的


0 0
原创粉丝点击