使用靜態技術初始化單例實例, 以防止使用同步?它如何實際工作?使用靜態技術初始化單例實例,以防止使用同步嗎?它如何實際工作?
我看過一些像沒有使用同步塊的地方我們可以創建一個線程安全的singleton實例嗎?
實際上它是如何工作的?兩者是如何相同的?
使用靜態技術初始化單例實例, 以防止使用同步?它如何實際工作?使用靜態技術初始化單例實例,以防止使用同步嗎?它如何實際工作?
我看過一些像沒有使用同步塊的地方我們可以創建一個線程安全的singleton實例嗎?
實際上它是如何工作的?兩者是如何相同的?
假設你指的是一個實現如:
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
謝謝,它已經幫助 –
請添加更多細節。你指的是什麼語言?提供實際的代碼示例可以幫助他人更好地理解問題。 – ALoopingIcon
對不起,我一直在使用java。 –