破壞單例模式的方法及應對
使用場景
單例模式的核心是乙個類只允許有乙個例項化物件。spring物件池預設就是單例模式。如果生產環境下某類只需要也只允許有乙個例項化物件就可以考慮使用單例模式。
實現單例模式的策略是:構造方法私有化, 也就是外部不允許通過new的方式獲取物件,而是提供乙個公開的靜態方法供外部獲取物件。內部提供邏輯判斷只會new出乙個物件。而難點在於在多執行緒的環境下保證只會new一次物件。
餓漢式單例類
package hunger;
public
class
people
public
static people getinstance()
}
測試
package hunger;
public
class
test01
}
hunger.people@6d06d69c
hunger.people@6d06d69c
餓漢式在類載入時就建立了例項化物件,執行緒安全,缺點是不能延遲載入。
易錯點是在私有構造方法中丟擲異常,private static people people = new people();是無法通過編譯的。
懶漢式單例類
package lazy;
public
class
lazy
public
static
synchronized lazy getinstance()
return lazy;
}}
測試
package lazy;
public
class
test01
}
lazy.lazy@6d06d69c
lazy.lazy@6d06d69c
優點是可以延遲載入,缺點是使用synchronized方法,系統開銷太大
反射呼叫呼叫私有構造方法
通過序列化與反序列化獲得物件
單例模式(5種實現方式)
1.餓漢式 不支援併發 此模式只能執行在單執行緒下,且類在載入時就已經建立好了例項,不管需不需要用。package com.lys 餓漢式 public class singleton1 private static singleton1 instance new singleton1 public...
單例模式 5種實現方式
單例模式能夠保證乙個類僅有唯一的例項,並提供乙個全域性訪問點。1 餓漢式 執行緒安全,呼叫效率高,但是不能延時載入 public class singleton public static singleton getinstance 2.懶漢式 執行緒安全,呼叫效率不高,但是能延時載入 public...
java單例模式的5種實現方式
簡介 單例模式是指在程式中只有乙個例項存在。並且在程式執行中的任何時候都可以獲取該例項物件。場景 1.android中資料庫多執行緒讀寫時,保證每個執行緒使用同乙個sqlitedatabase物件,否則會報錯 database is locked 2.android常用框架eventbus中使用了單...