zoukankan      html  css  js  c++  java
  • 单例模式

    意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    实现(单线程):

    public class Singleton {
        private static Singleton uniqueInstance; // 自己管理唯一实例变量
    
        private Singleton() {} // 构造器私有
    
        public static Singleton getInstance() {
            if (uniqueInstance == null) 
                uniqueInstance = new Singleton(); // 需要用时才实例化
            return uniqueInstance;
        }
    }
    

    实现(多线程):

    public class Singleton {
        private static Singleton uniqueInstance;
    
        private Singleton() {}
    
        public static synchronized Singleton getInstance() { // 同步方法
            if (uniqueInstance == null)
                uniqueInstance = new Singleton();
            return uniqueInstance;
        }
    }
    

    实现(多线程改良 1):

    public class Singleton {
        private static final Singleton uniqueInstance = new Singleton(); // 静态初始化时便创建
    
        private Singleton();
    
        public static Singleton getInstance() {
            return uniqueInstance;
        }
    }
    

    实现(多线程改良 2):

    public class Singleton {
        private static volatile Singleton uniqueInstance;  // 声明为volatile域,保证其可见性
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            if (uniqueInstance == null) {
                synchronized (Singleton.class) {  // 同步块
                    uniqueInstance = new Singleton();
                }
            }
            return uniqueInstance;
        }
    }
  • 相关阅读:
    vim 使用总结
    C语言中的条件编译
    getopt函数
    Linux 命令使用总结
    vim ctags cscope
    shell 定时处理
    shell 脚本中的标准输出
    ubuntu mail 命令发送邮件
    shell 编程中的特殊字符的处理
    system v 消息队列
  • 原文地址:https://www.cnblogs.com/hippiebaby/p/5468858.html
Copyright © 2011-2022 走看看