单例模式-单例模式

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;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章