亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java單例模式的實現方法是什么

小億
82
2024-02-02 09:48:44
欄目: 編程語言

Java單例模式的實現方法有以下幾種:

  1. 懶漢式(Lazy Initialization): 在第一次使用時才創建實例。線程不安全版本的懶漢式實現如下:
public class Singleton {
    private static Singleton instance;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

可以通過在getInstance()方法上加鎖synchronized來實現線程安全的懶漢式單例模式,但是會影響效率:

public class Singleton {
    private static Singleton instance;

    private Singleton(){}

    public static synchronized Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}
  1. 餓漢式(Eager Initialization): 在類加載時就創建實例,線程安全。實現如下:
public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton(){}

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

由于在類加載時就創建實例,因此無法實現延遲加載。

  1. 雙重檢查鎖定(Double Checked Locking): 在懶漢式的基礎上,進行雙重檢查,確保線程安全且效率較高:
public class Singleton {
    private volatile static Singleton instance;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null){
            synchronized (Singleton.class){
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

使用volatile修飾instance變量可以保證多線程環境下的可見性和有序性。

  1. 靜態內部類(Static Inner Class): 利用類的靜態內部類來實現懶漢式的延遲加載和線程安全:
public class Singleton {
    private Singleton(){}

    private static class SingletonHolder{
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
}

靜態內部類只有在第一次使用時才會被加載,從而實現了延遲加載。

  1. 枚舉(Enum): 使用枚舉類來實現單例模式,可以保證線程安全和防止反射攻擊:
public enum Singleton {
    INSTANCE;

    public void doSomething(){
        // do something
    }
}

0
麻栗坡县| 田林县| 鹤岗市| 内江市| 渑池县| SHOW| 桐梓县| 涟水县| 潞西市| 新密市| 尼木县| 阿巴嘎旗| 衡阳县| 曲阳县| 潜山县| 广昌县| 神木县| 浦城县| 凤台县| 木兰县| 达拉特旗| 扎鲁特旗| 新巴尔虎右旗| 邵阳市| 临邑县| 多伦县| 高雄县| 昌宁县| 嘉祥县| 三河市| 古蔺县| 原平市| 信宜市| 阳高县| 通许县| 晋州市| 烟台市| 红河县| 昌江| 哈尔滨市| 平远县|