美文网首页
体验比较好的单例模式

体验比较好的单例模式

作者: 风一样的存在 | 来源:发表于2019-05-16 14:31 被阅读0次
    1.静态内部类的实现
    public class Singleton {
        private Singleton() {}
        private static class SingletonInstance {
            private static final Singleton INSTANCE = new Singleton();
        }
        public static Singleton getInstance() {
            return SingletonInstance.INSTANCE;
        }
    }
    

    这种方式跟饿汉式方式采用的机制类似,但又有不同。两者都是采用了类装载的机制来保证初始化实例时只有一个线程。不同的地方在饿汉式方式是只要Singleton类被装载就会实例化,没有Lazy-Loading的作用,而静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。

    2.枚举类实现
    public enum Singleton {
        INSTANCE;
        public void method() {
    
        }
    }
    

    借助JDK1.5中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。

    3.双重检查和禁止指令重排
    public class Singleton {
        private static volatile Singleton instance = null;
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    

    volatile具有有序性(禁止指令重排序)和可见性

    相关文章

      网友评论

          本文标题:体验比较好的单例模式

          本文链接:https://www.haomeiwen.com/subject/qordaqtx.html