单例模式有两种模式:一种时懒汉式单例 ,一种是饿汉式单例
饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了
而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。
就是说,我的理解:饿汉式他表示很饿,饿的时候就急着吃东西,吃东西就有能量啦,单例就加载啦;懒汉式就是比较懒,懒就什么都不想做,他是只有到不得不的程度才去做这件事
package com.secondDay.eager;
public class EagerSingletonEx {
private static EagerSingletonEx instance=new EagerSingletonEx();
private EagerSingletonEx(){
}
public static EagerSingletonEx getInstance(){
return instance;
}
public void test(){
System.out.println("只有一个实例在运行");
}
}
package com.secondDay.eager;
public class EagerSingletonTest {
public static void main(String[] args) {
EagerSingletonEx instance = EagerSingletonEx.getInstance();
instance.test();
//出现如下错误
EagerSingletonEx instance1 = EagerSingletonEx.getInstance();
instance1.test();
System.out.println(instance1==instance);
}
}
懒汉式
package com.secondDay.lazy;
public class LazySingleton {
private static LazySingleton lazy=null;
private LazySingleton() {
}
synchronized public static LazySingleton getInstance() {
if (lazy == null) {
//这是为什么呢,就是返回这个就不可以,
// return lazy=new LazySingleton();
return new LazySingleton();
}else {
return lazy;
}
}
public void info(){
System.out.println("这是懒汉式单例");
}
}
package com.secondDay.lazy;
public class LazySingletonTest {
public static void main(String[] args) {
LazySingleton lazy1=LazySingleton.getInstance();
lazy1.info();
LazySingleton lazy2 = LazySingleton.getInstance();
lazy2.info();
System.out.println(lazy1==lazy2);
}
}