七種單例模式的那些事

2021-10-04 02:46:51 字數 2533 閱讀 8708

public class singleton1 

//餓漢式(靜態變數)

//私有化構造方法

private singleton1()

//建立內部靜態例項

private final static singleton1 instance = new singleton1();

//提供公有的get例項方法

public static singleton1 getinstance()

/** 總結:類載入的時候完成例項化,避免了執行緒同步問題,

* 但如果該類未被使用,卻完成例項化會造成記憶體浪費

** */

}

public class singleton2 

//餓漢式(靜態**塊)

//私有化構造方法

private singleton2()

//建立內部靜態例項

private static singleton2 instance ;

//靜態**塊

static

//提供公有的get例項方法

public static singleton2 getinstance()

/** 總結(同靜態變數):類載入的時候完成例項化,避免了執行緒同步問題,

* 但如果該類未被使用,卻完成例項化會造成記憶體浪費

** */

}

public class singleton3 

//懶漢式(靜態**塊)

//私有化構造方法

private singleton3()

//建立內部靜態例項

private static singleton3 instance ;

//提供公有的get例項方法

public static singleton3 getinstance()

return instance;}/*

* 總結:起到了懶載入的作用,但只適用於單執行緒的情況

* 如果多執行緒情況下,有乙個執行緒if(instance==null)還沒來得及建立物件,另外乙個執行緒也進入了方法,就會出現多個例項

** */

}

public class singleton4 

//懶漢式(靜態**塊,執行緒安全)

//私有化構造方法

private singleton4()

//建立內部靜態例項

private static singleton4 instance ;

//提供公有的get例項方法

public static synchronized singleton4 getinstance()

return instance;

}//同步**塊,是一種錯誤的寫法

/* public static synchronized singleton4 getinstance()

}return instance;

}*//*

* 總結:執行緒安全,但效率較低。

** */

}

public class singleton5 

//doublecheck(volatile禁止重排序)

//私有化構造方法

private singleton5()

//建立內部靜態例項

private static volatile singleton5 instance ;

//提供公有的get例項方法

public static singleton5 getinstance() }}

return instance;}/*

* 總結:執行緒安全,但效率較低。

** */

}

public class singleton6 

//靜態內部類

//私有化構造方法

private singleton6()

//提供公有的get例項方法

private static class staticsingleton

public static singleton6 getinstance()

/** 總結:當呼叫getinstance的時候才用載入靜態內部類,實現了懶載入

* 靜內部類的靜態屬性載入類的時候才會被jvm載入,保證了執行緒安全性

** */

}

public class singleton7 

//列舉實現單例

enum singleton

/** 總結:jdk1.5以後的特性,執行緒安全,可以防止反序列化

* 推薦使用

** */

/**餓漢式(靜態**塊)實現單例(單執行緒推薦)

* 靜態內部類實現單例

* 列舉實現單例(官方推薦)

* */

}

單例模式實現(七種)

單例模式確保乙個類只有乙個例項,並提供乙個全域性訪問點,實現單例模式的方法是私有化建構函式,通過getinstance 方法例項化物件,並返回這個例項 保證在jvm中只有乙個例項 優點 1 單例類只有乙個例項 2 共享資源,全域性使用 3 節省建立時間,提高效能 public class singl...

單例模式的七種寫法

第一種 懶漢,執行緒不安全 public class singleton public static singleton getinstance return instance 第二種 懶漢,執行緒安全 public class singleton public static synchronize...

七種單例模式的寫法

餓漢式 特點 在類載入時例項化,執行緒安全,如果沒有使用instance的話比較耗費資源 class singletondemo public static singletondemo getinstance 懶漢式 非執行緒安全 特點 使用時再例項化 class singletondemo pub...