1.餓漢式(不支援併發)
此模式只能執行在單執行緒下,且類在載入時就已經建立好了例項,不管需不需要用。
package com.lys;
//餓漢式
public class singleton1
private static singleton1 instance = new singleton1();
public static singleton1 getinstance()
}
2.懶漢式(不支援併發)
此模式只能執行在單執行緒下,在呼叫獲取例項的方法時才建立例項。
package com.lys;
//懶漢式、不支援多併發
public class singleton2
private static singleton2 instance = null;
public static singleton2 getinstance()
return instance;
}}
3.懶漢式(支援併發、synchronized)
synchronized 鎖住了整個方法,當有多個執行緒需要訪問方法時,不管例項有沒有建立,都會要排隊等待才能拿到例項,效率低。
需要改進:只有第一次建立例項時才需要鎖,其他時候不需要加鎖。
package com.lys;
//懶漢式、支援多併發、效率低
public class singleton3
private static singleton3 instance = null;
public synchronized static singleton3 getinstance()
return instance;
}}
4.雙重檢查鎖 (volatile)–常用package com.lys;
//double checked locking、支援多併發、效率高、新增volatile關鍵字
public class singleton4
private volatile static singleton4 instance = null;
public static singleton4 getinstance()
}return instance;
}}
5.靜態私有內部類(最常用)
內部類的好處:內部類在被呼叫的時候才例項化其靜態成員變數,高!
package com.lys;
//靜態私有內部類、支援多併發、效率高、
public class singleton5
private static class singletonholder
public static singleton5 getinstance()
}
5種方式實現單例模式
破壞單例模式的方法及應對 使用場景 單例模式的核心是乙個類只允許有乙個例項化物件。spring物件池預設就是單例模式。如果生產環境下某類只需要也只允許有乙個例項化物件就可以考慮使用單例模式。實現單例模式的策略是 構造方法私有化,也就是外部不允許通過new的方式獲取物件,而是提供乙個公開的靜態方法供外...
單例模式 5種實現方式
單例模式能夠保證乙個類僅有唯一的例項,並提供乙個全域性訪問點。1 餓漢式 執行緒安全,呼叫效率高,但是不能延時載入 public class singleton public static singleton getinstance 2.懶漢式 執行緒安全,呼叫效率不高,但是能延時載入 public...
java單例模式的5種實現方式
簡介 單例模式是指在程式中只有乙個例項存在。並且在程式執行中的任何時候都可以獲取該例項物件。場景 1.android中資料庫多執行緒讀寫時,保證每個執行緒使用同乙個sqlitedatabase物件,否則會報錯 database is locked 2.android常用框架eventbus中使用了單...