2017-02-17 40 views
0

使用靜態技術初始化單例實例, 以防止使用同步?它如何實際工作?使用靜態技術初始化單例實例,以防止使用同步嗎?它如何實際工作?

我看過一些像沒有使用同步塊的地方我們可以創建一個線程安全的singleton實例嗎?

實際上它是如何工作的?兩者是如何相同的?

+2

請添加更多細節。你指的是什麼語言?提供實際的代碼示例可以幫助他人更好地理解問題。 – ALoopingIcon

+0

對不起,我一直在使用java。 –

回答

0

假設你指的是一個實現如:

class Singleton { 

    private static Singleton instance = new Singleton(); 

    public static Singleton getInstance() { 
     return instance; 
    } 
} 

行:private static Singleton instance = new Singleton(); 在類裝載時計算(這意味着如果一個攻擊者加載此類多次 - 多個實例會創建!)。

在第一次使用它(通過調用靜態字段/方法或創建實例)之前,類(通常)僅加載一次。

Java虛擬機的實現負責 使用 以下步驟照顧同步和遞歸初始化...

來源:這種機制是由JVM同步http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.4.2

+0

謝謝,它已經幫助 –

相關問題