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

    单例模式: 

    读取配置文件的工具类。运行期间有,且只有一个实例

    单例提高系统性能减少io操作

    关键点:

       1.一个类只有一个实例----最基本的--(只提供私有的构造器)

      2. 他必须自行创建这个实例。(定义了私有的静态的该类的共有的方法)

      3. 他必须自行向整个系统这个实例提供一个静态的共有的方法,返回创建或获取本身静态的私有对象

    import java.util.Properties;
    
    public class ConfigManager {
        private static ConfigManager configManage;
        private static Properties properties;
       //私有构造器   防止外界new实例   
        private ConfigManager() {
        //读io 减少系统的消耗
        String configFile="database.properties";
        properties=new Properties();
        //通过classpath找资源
        InputStream is=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
        try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    
       } 
        
        //全局访问点    懒汉模式线程不安全
        public static ConfigManager getInstance(){
            if(configManage==null){
                configManage=new ConfigManager();
            }
            return configManage;
        }
       
        public String getValue(String key){
            return properties.getProperty(key);
        }
    }

    这是懒汉模式的实例,线城市不安全的,在并发的环境下很有可能会出现多个ConfigManager

    改进: 1. 需要考虑同步加锁的方法synchronized

     //全局访问点    懒汉模式线程不安全
        public static synchronized ConfigManager getInstance(){  //这样就OK了
            if(configManage==null){
                configManage=new ConfigManager();
            }
            return configManage;
        }

    2.但是这种方法采用的几率不高,通常都采用双重校验锁的方法解决问题。
    public static  ConfigManager getInstance(){ 
            if(configManage==null){
               synchronised(configManage.class){
                 if(configManage==null){
             configManage=new ConfigManager();
                 }
                 }
                
            }
            return configManage;
        }

      饿汉模式

    public class Singleton{
        
    public static  Singleton singleton;
    static {     //静态代码块类加载时执行
      singleton=new Singleton();
      }
    private Singleton(){}
    
    public static Singleton getInstance(){
    
    return singleton;
    }
    
    
    
    
    }

    小结:

    懒汉模式:
    线程不安全的,需要使用同步锁的方法和双重校验锁
    懒汉比较懒,在类加载的时候不会创建实例,在实例运行时再创建
    这样类加载快,运行的时候获取对象的速度就会慢,少了内存的消耗。
    懒汉延迟加载:lazy loading
    饿汉模式:
    线程是安全的,在类的加载的时候就自行初始化,所以类加载慢,但运行时获取对象就快了
    public static ConfigManager configManager=new ConfingManager();//自行创建 的
     


    
    


  • 相关阅读:
    leetcode刷题29
    leetcode刷题28
    leetcode刷题27
    leetcode刷题23
    leetcode刷题22
    leetcode刷题21
    leetcode刷题20
    Unity中通过DoTween实现转盘效果
    U3D工作注意事项,不要再犯!
    Unity中String字符串的优化
  • 原文地址:https://www.cnblogs.com/cuixiaomeng/p/7421636.html
Copyright © 2011-2022 走看看