中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
普兰县| 甘洛县| 钟祥市| 娱乐| 隆子县| 长兴县| 积石山| 遂昌县| 澎湖县| 陆良县| 新乡县| 方正县| 唐海县| 炉霍县| 溧水县| 饶平县| 新民市| 理塘县| 吴忠市| 江源县| 新田县| 京山县| 紫云| 钦州市| 宁化县| 喜德县| 彰化县| 盘山县| 敦化市| 酒泉市| 平乡县| 青岛市| 宣城市| 登封市| 万年县| 饶平县| 电白县| 达拉特旗| 运城市| 宝应县| 金门县|