首页 > 代码库 > 单例模式
单例模式
运行期间有且仅有一个实例。(比较耗系统性能的时候用单例模式)
关键点:
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;
}
单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。