单例模式
主要有三种:懒汉式单例、饿汉式单例。
单例模式有以下特点:有且只有一个实例,2个私有1个公有
懒汉单例模式
//在第一次调用的时候实例化自己
public static synchronized ConfigManager getInstance(){
if (configManager==null) {
configManager=new ConfigManager();
}
return configManager;
}
缺点:线程不安全,同时有两个类调用时,有可能出现混乱,第一个类没有完成调用时,另外一个类可能进入了该类的方法
解决方法:使用双重锁定
//得到对象
public static synchronized ConfigManager getInstance(){
synchronized (ConfigManager.class) {
if (configManager==null) {
configManager=new ConfigManager();
}
}
return configManager;
}
饿汉单例模式
//得到对象
public static ConfigManager getInstance(){
if (configManager==null) {
configManager=new ConfigManager();
}
return configManager;
}
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。