• 单例模式


    单例模式: 

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

    单例提高系统性能减少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();//自行创建 的
     


    
    


  • 相关阅读:
    JSON中toJSONString、ParseObject、parseArray的作用以及用 com.alibaba.fast.JSONArray解析字符串或者List集合
    几种操作Elasticsearch方法
    ElasticSearch 中boolQueryBuilder的使用
    maven依赖
    @javax.ws.rs Webservice注解
    Bug-滑稽
    Web安全之文件上传
    利用SSRF漏洞内网探测来攻击Redis(通过curl命令 & gopher协议)
    利用SSRF漏洞内网探测来攻击Redis(请求头CRLF方式)
    SVG XSS一般过程
  • 原文地址:https://www.cnblogs.com/cuixiaomeng/p/7421636.html
Copyright © 2020-2023  润新知