單例模式:靜態內部類實現的單例模式是懶加載且線程安全的

由於加載一個類時,其內部類不會同時被加載。一個類被加載,當且僅當其某個靜態成員(靜態域、構造器、靜態方法等)被調用時發生。因此使用靜態內部類實現的單例模式是懶加載的且線程安全。

一、代碼

public class UserSingleton {

    /** 私有化構造器 */

    private UserSingleton() {
    }

    /** 對外提供公共的訪問方法 */
    public static UserSingleton getInstance() {

        return UserSingletonHolder.INSTANCE;
    }

    /** 寫一個靜態內部類,裏面實例化外部類 */
    private static class UserSingletonHolder {
        private static final UserSingleton INSTANCE = new UserSingleton();
    }
}

二、小結

        (1)爲什麼這樣實現就是單例的?

                 因爲這個類的實例化是靠靜態內部類的靜態常量實例化的。

                 INSTANCE 是常量,因此只能賦值一次;它還是靜態的,因此隨着內部類一起加載。

        (2)這樣實現有什麼好處?

                  我記得以前接觸的懶漢式的代碼好像有線程安全問題,需要加同步鎖才能解決。

                  採用靜態內部類實現的代碼也是懶加載的,只有第一次使用這個單例的實例的時候才加載;同時不會有線程安全問題

原文鏈接:https://www.cnblogs.com/zeng1994/p/7397637.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章