• Java 单例模式


    代码:

    双重检查,懒汉模式

    public class Singleton {
        private static Singleton INSTANCE;
        private Singleton() {}
        public static Singleton getInstance() {
            if (INSTANCE == null) {
                synchronized(Singleton.class){
                    if(INSTANCE == null) {
                        INSTANCE = new Singleton();
                    }
                }
            }
            return INSTANCE;
        }
    }
    • 优点:使用了双重检查,很大程度上避免了线程不安全,同时也避免了不必要的锁开销。这里要注意,虽然未使用volatile关键字,但是这里的synchronized已经保证了INSTANCE写操作对其它线程读操作的可见性。
    • 缺点:性能开销有点大

    静态常量,饿汉模式

    public class Singleton {
        private static final Singleton INSTANCE = new Singleton();
        private Singleton() {}
        public static Singleton getInstance() {
            return INSTANCE;
        }
    }
    • 优点:实现简单,无线程同步问题
    • 缺点:在类装载时完成实例化。若该实例一直未被使用,则会造成资源浪费

    静态代码块,饿汉模式

    public class Singleton {
        private static Singleton INSTANCE;
    
        static{
            INSTANCE = new Singleton();
        }
        private Singleton() {}
        public static Singleton getInstance() {
            return INSTANCE;
        }
    }

    跟上面的基本一样。

    静态内部类,懒汉模式(感觉最好的一个)

    public class Singleton {
        private Singleton() {}
        public static Singleton getInstance() {
            return InnerClass.INSTANCE;
        }
    
        private static class InnerClass {
            private static final Singleton INSTANCE = new Singleton();
        }
    }
    • 优点:无线程同步问题,实现了懒加载(Lazy Loading)。因为只有调用getInstance时才会装载内部类,才会创建实例

    http://www.jasongj.com/design_pattern/singleton/

    http://mp.weixin.qq.com/s/1fQkkdtzYh_OikbYJnmZWg

  • 相关阅读:
    leetcode
    leetcode
    leetcode
    leetcode
    Postman
    Fiddler抓百度和bing搜索包
    Jmeter脚本录制
    Android Studio使用Maven国内镜像
    Open Live Writer
    PureXXX使用手记
  • 原文地址:https://www.cnblogs.com/hongdada/p/6230549.html
Copyright © 2020-2023  润新知