懒汉模式和饿汉模式

懒汉模式
在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例
特点
线程不安全
延迟加载(lazyloading)
如何解决线程安全问题?
同步(synchronized)

饿汉模式
在类加载的时候,就完成初始化
特点
线程安全
不具备延迟加载特性
要求饿汉模式同时要具备延迟加载的特性
使用静态内部类

package cn.smbsm.tools;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//读取配置文件的工具类-单例模式
public class ConfigManager {
private static Properties properties;
//饿汉模式 类加载时,自行进行初始化操作 不具备延迟加载
private static ConfigManager configManager = new ConfigManager();
//私有构造器-读取配置文件的操作
private ConfigManager(){
properties = new Properties();
String configFile = “database.properties”;
InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//全局访问点-(懒汉模式)
/public static synchronized ConfigManager getInstance(){
if(configManager == null){
configManager = new ConfigManager();
}
return configManager;
}
/

//饿汉模式
public static ConfigManager getInstance(){
	return configManager;
}

//得到configmanager实例以后通过properties读取配置文件返回类型是String
public String getValue(String key){
	return properties.getProperty(key);
}

}

要求饿汉模式同时要具备延迟加载的特性
使用静态内部类
package cn.smbsm.tools;

public class Singleton {
private static Singleton singleton;
//私有构造 运行期间只执行一次
private Singleton(){
//放置只执行一次的业务代码操作
}
//内部类里面去实例化singleton
public static class SingletonHelper{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
singleton = SingletonHelper.INSTANCE;
return singleton;
}
//测试
public static Singleton test(){
return singleton;
}
public static void main(String[] args) {
System.out.println(“singleton test()-------”+Singleton.test());
System.out.println(“singleton getInstance()----”+Singleton.getInstance());
}
}

发布了8 篇原创文章 · 获赞 0 · 访问量 279

猜你喜欢

转载自blog.csdn.net/qq_35201262/article/details/103435956
今日推荐