單例模式

單例模式都在什麼時候用?

1.windows任務管理器,回收站,一個系統只有一個。

2.web應用的配置文件,方便整個代碼共享。

。。。。

 

單例模式的第一種實現方式---懶漢模式(線程不安全)

 

public class Singleton {
    private static Singleton instance;
    private Singleton (){}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public void show(){
        System.out.println("我是懶漢~");
    }

}

 

 

單例模式的第二種實現方式---懶漢模式(線程安全)

就是在getInstance方法上加入synchronized

這種方法雖然很好的實現了懶加載,在多線程中能很好的工作,但是效率很低,大部分情況下不需要同步。

但是這種方法第一次調用的時候才初始化,避免了資源的浪費。

public class Singleton {
    private static Singleton instance;
    private Singleton (){}

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public void show(){
        System.out.println("我是懶漢~");
    }

}

 

 

單例模式的第三種實現方式---餓漢模式

優點:沒有加鎖,效率高

缺點:類加載的時候就初始化,浪費內存

public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}

    public static  Singleton getInstance() {
        return instance;
    }

    public void show(){
        System.out.println("我是餓漢~");
    }

}

 

單例模式的第四種實現方式---雙檢鎖/雙重校驗鎖(DCL,double checked locking)

雙鎖機制,安全且在多線程的情況下保持高性能

public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
        if (singleton == null) {  
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了23 篇原創文章 · 獲贊 17 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章