码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2016-11-02 23:37:07      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:并发   返回   定义   构造器   res   catch   写文件   man   val   


运行期间有且仅有一个实例。(比较耗系统性能的时候用单例模式)

关键点:
1,一个类只有一个实例,只提供私有的构造器
2,它必须自行创建这个实例,定义了静态的该类的私有对象
3,它必须自行向整个系统提供这个实例,提供了一个静态的public方法
(返回创建或获取本身的静态私有对象)


懒汉模式:(1,加同步锁synchronized 2,加双重校验锁)
在类加载时,不创建实例,运行调用时创建。
类加载快,运行获取对象速度慢。

 

package cn.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ConfigManager {
    private static ConfigManager configManager;
    private static Properties properties;
    
    private ConfigManager(){
        //文件在src下,所以可以直接写文件名
        String configFile ="jdbc.properties";
        properties = new Properties();
        InputStream is =ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
        try {
            properties.load(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    //懒汉模式  线程不安全,在并发的情况下会出现多信configmanager,可以加同步锁解决
    public static synchronized ConfigManager  getInstance(){
        if(configManager == null){
            configManager = new ConfigManager();
        }
        return configManager;
    }
====================================================================================
    
        //双重校验锁
    public static ConfigManager getInstance(){
        if(configManager == null){
            synchronized (configManager.class){
                if(configManager == null){
                    configManager = new ConfigManager();
                }
            }
        }
        return configManager;
    }
    
    
    
    //单例模式必须给外界提供一个公共方法
    public String getValue(String key){
        return properties.getProperty(key);
    }
    
    
}


===========================================================================================


饿汉模式:线程安全
在类加载时,就完成初始化,所以类加载慢 ,运行时快。


//前面private static ConfigManager configManager;直接 new ConfigManager();

public static ConfigManager getInstance(){
return configManager;
}

单例模式

标签:并发   返回   定义   构造器   res   catch   写文件   man   val   

原文地址:http://www.cnblogs.com/bboymonk/p/6024738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!