单利模式

保证一个类仅有一个实例,提供了唯一的全局访问点,控制全局访问;控制实例数量,节约了资源,对于频繁创建和销毁的对象,提高系统性能。

如线程池、打印机和显卡等的设备驱动。

要点

  1. 私有构造方法,避免被外部实例化
  2. 静态公开的获取唯一实例的方法
  3. 私有内部实例(对外部不可见,避免修改)

几种实现方式

  1. 饿汉
    类加载时就初始化(创建时机不可控,线程安全)

  2. 懒汉
    线程不安全的懒汉模式:多线程下严格来说不是单例
    线程安全的懒汉模式:每次获取实例都会竞争锁,效率低
    懒汉模式在第一次调用时才初始化

  3. 双重校验锁 DCL double-checked locking
    public class Singleton {  
        private volatile static Singleton singleton;  
        private Singleton (){}  
        public static Singleton getSingleton() {  
        if (singleton == null) {  
            synchronized (Singleton.class) {  
            if (singleton == null) {  
                singleton = new Singleton();  
            }  
            }  
        }  
        return singleton;  
        }  
    }

     DCL失效问题

  4. 静态内部类
    public class Singleton {  
        private static class SingletonHolder {  
        private static final Singleton INSTANCE = new Singleton();  
        }  
        private Singleton (){}  
        public static final Singleton getInstance() {  
        return SingletonHolder.INSTANCE;  
        }  
    }

     

posted @ 2019-06-08 06:58  vvf  阅读(175)  评论(0编辑  收藏  举报