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;
        }
    }

    二、改良版,效率高。

    public class Singleton {
        
        private volatile static Singleton uniqueInstance; // volatile关键字确保多线程正确处理 uniqueInstance
        private Singleton() {};
        
        public static Singleton getInstance() {
            if(uniqueInstance == null) {
                synchronized(Singleton.class) {
                    if(uniqueInstance == null) { // 再检查一次
                        uniqueInstance = new Singleton();
                    }
                }
            }
            return uniqueInstance;
        }
    }

    三、最简单,效率也最高

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

    以上就是单件模式(单例模式),是很简单吧

  • 相关阅读:
    左眼右眼
    Mac 的“任务管理器” —— 活动监视器
    [分享] VIM 常用命令及游戏练级
    iOS 7 如何关闭已打开的应用(App)
    iPhone 如何设置彩信 ?
    JavaScript —— attachEvent 方法的使用
    习惯&感恩
    MySQL 基础 备份和恢复
    Python 数据结构 树
    Python 正在表达式
  • 原文地址:https://www.cnblogs.com/M-Anonymous/p/13197695.html
Copyright © 2011-2022 走看看