zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU 5919 分块做法
    HDU 3333 分块求区间不同数和
    CF 333E 计算几何+bitset优化
    hdu 1043 八数码--打表
    hdu 1043 八数码问题-A*搜索
    hdu 5919 主席树
    hiho1388 FFT/NTT
    HDU 5869区间CGD不同种类数---树状数组+map统计区间不同种类数(离线)
    HDU 5875 二分+st表
    HDU 5898 基础数位DP
  • 原文地址:https://www.cnblogs.com/hongdada/p/6230549.html
Copyright © 2011-2022 走看看