單例模式的標準寫法、注意事項、做用及測試

最新最準確內容建議直接訪問原文:單例模式java

 

主要介紹單例模式的標準寫法、注意事項、做用、測試,以Java語言爲例,下面代碼是目前見過最好的寫法:android

public class Singleton {

    private static volatile Singleton instance = null;

    // private constructor suppresses
    private Singleton(){
    }

    public static Singleton getInstance() {
        // if already inited, no need to get lock everytime
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }

        return instance;
    }
}

一、須要注意的點算法

其中須要注意的點主要有三點
(1) 私有化構造函數
(2) 定義靜態的Singleton instance對象和getInstance()方法
(3) getInstance()方法中須要使用同步鎖synchronized (Singleton.class)防止多線程同時進入形成instance被屢次實例化
能夠看到上面在synchronized (Singleton.class)外又添加了一層if,這是爲了在instance已經實例化後下次進入沒必要執行synchronized (Singleton.class)獲取對象鎖,從而提升性能。緩存

Ps: 也有實現使用的是private static Object    obj      = new Object();加上synchronized(obj),實際沒有必要多建立一個對象。synchronized(X.class) is used to make sure that there is exactly one Thread in the block.性能優化

 

二、單例的做用
單例主要有兩個做用
(1) 保持程序運行過程當中該類始終只存在一個示例
(2) 對於new性能消耗較大的類,只實例化一次能夠提升性能網絡

 

三、單例模式測試多線程

單例模式能夠使用多線程併發進行測試,代碼以下:併發

 

你可能還感興趣:ide

Android公共庫(緩存 下拉ListView 下載管理Pro 靜默安裝 root運行 Java公共類)

Android ImageCache圖片緩存

Android性能優化專題

相關文章
相關標籤/搜索