1.饿汉式-单例模式
package com.tedu.day51;
//饿汉式单例模式: 当MYSingleTonHungry类被加载到内存时执行创建对象的代码(创建MYSingleTonHungry对象)
public class Test2_SingleTon {
public static void main(String[] args) {//当调用getObj方法时就返回加载MYSingleTonHungry类时创建的对象
MYSingleTonHungry mth=MYSingleTonHungry.getObj();
}//因为是还没有到用getObj获取对象的时候就创建了MYSingleTonHungry对象. 所以称作饿汉式
} //还没到需要吃饭的时候就吃饭
class MYSingleTonHungry{
private static MYSingleTonHungry obj=new MYSingleTonHungry();
private MYSingleTonHungry(){}
public static MYSingleTonHungry getObj() {
return obj;
}
}
2.懒汉式单例模式:
package com.tedu.day51;
//懒汉式-单例模式
public class Test3_SingleTon {
public static void main(String[] args) {
MySingleton2 ms2=MySingleton2.getMySt();
System.out.println(ms2==null);
}
}
class MySingleton2{
//i.私有化构造方法(不能随便new对象)
private MySingleton2(){}
//ii.在类的内部,创建好一个对象--需要时发现对象不存在,再new(延迟加载)
static private MySingleton2 my;
//iii.给全局设置一个公共的访问点--getMySt。 当getMySt执行时发现需要获取的对象不存在再new对象出来
static public MySingleton2 getMySt(){
synchronized (MySingleton2.class){
if(my==null){//注意:同步代码资源是静态资源,同步监视器对象(锁对象)必须是当前类的字节码对象
my=new MySingleton2();
}
return my;
}
}
}