單例設計模式(Singleton)的優化

單例模式的優化

單例模式懶漢式寫法,單例模式的優化有如下四個方面:java

  1. 使用同步保證線程安全synchronized
  2. 使用volatile關鍵字:volatile關鍵字提醒編譯器後面所定義的變量隨時都有可能改變,所以編譯後的程序每次須要存儲或讀取這個變量的時候,都會直接從變量地址中讀取數據。若是沒有volatile關鍵字,則編譯器可能優化讀取和存儲,可能暫時使用寄存器中的值,若是這個變量由別的程序更新了的話,將出現不一致的現象。
  3. 防止反射調用私有構造方法
  4. 讓單例序列化安全

代碼實現安全

import java.io.Serializable;

public class Singleton implements Serializable {
    //加上volatile關鍵字保證變量的一致性
    private volatile static Singleton singleton = null;

    private Singleton() {
        if (singleton != null) {
            throw new RuntimeException("此類爲單例模式,已經被實例化");
        }
    }

    public static Singleton getInstance() {
        //外層判斷是防止已經new過了
        if (singleton == null) {
            //加上synchronized關鍵字,保證線程安全
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}
相關文章
相關標籤/搜索