单例模式
一个使用单例模式的类,是指整个程序运行时只存在该类的一个实例。
单例模式的两种简单构建方法
饿汉式
指在类初始化时便创建该类的实例,外部可以通过getInstance()直接获取到实例对象。这种方式比较简单并且调用的效率比较高。但是存在该类初始化之后并没有使用的可能所以可能造成资源的浪费。
public class SingletonDemo01 {
//线程安全,效率高,可能会造成资源的浪费
private static SingletonDemo01 singletonDemo01 = new SingletonDemo01();//类初始化时立即加载
private SingletonDemo01(){
}
public static SingletonDemo01 getInstance(){
return singletonDemo01;
}
}
懒汉式
指在调用getInstance()时创建该类的实例对象,这种方法可以避免饿汉式的资源浪费问题,但是getInstance()是同步的方法,如果被多次调用的话执行效率会比较低。
//资源利用率高,调用效率不高,多个线程进行并发调用时效率极低
public class SingletonDemo02 {
private static SingletonDemo02 singletonDemo02;
private SingletonDemo02(){
}
//实现了延时加载,方法同步,调用效率低
public synchronized static SingletonDemo02 getInstance(){
if(singletonDemo02 == null){
singletonDemo02 = new SingletonDemo02();
}
return singletonDemo02;
}
}