Java单例模式的几种实现方式
Java單例模式的幾種實(shí)現(xiàn)方式
在Java 中,單例類只能有一個(gè)實(shí)例,必須創(chuàng)建自己的唯一實(shí)例,單例類必須給所有其他對(duì)象提供這一實(shí)例。Java 單例模式有很多種實(shí)現(xiàn)方式,在這里給大家介紹單例模式其中的幾種。分別是餓漢式,懶漢式,Double CheckLock實(shí)現(xiàn)單例,靜態(tài)內(nèi)部類。它們都有相互的優(yōu)缺點(diǎn)。
適用場景:
需要生成唯一序列的環(huán)境。
需要頻繁實(shí)例化然后銷毀的對(duì)象。
創(chuàng)建對(duì)象時(shí)耗時(shí)過多或者耗資源過多,但又經(jīng)常用到的對(duì)象。
方便資源相互通信的環(huán)境。
選擇:
單例對(duì)象占用資源少,不需要延時(shí)加載,枚舉好于餓漢。
單例對(duì)象占用資源多,需要延時(shí)加載,靜態(tài)內(nèi)部類好于懶漢式。
一. 餓漢式
線程安全,調(diào)用效率高,但是不能延時(shí)加載。
//實(shí)例化這個(gè)類 public class Singleton {private static final Singleton instance = new Singleton();// 私有化構(gòu)造器private Singleton(){} //創(chuàng)建靜態(tài)工廠方法,讓外部可以獲取實(shí)例public static Singleton getInstance(){return instance;} }二. 懶漢式
線程安全,調(diào)用效率不高,但是能夠延時(shí)加載。
//類初始化時(shí),不初始化這個(gè)對(duì)象(延時(shí)加載,真正用的時(shí)候再創(chuàng)建) public class Singleton {private static final Singleton instance;// 私有化構(gòu)造器 private Singleton(){} //方法同步,調(diào)用效率低// 創(chuàng)建靜態(tài)工廠方法 ,讓外部可以獲取實(shí)例public static synchronized Singleton getInstance(){if (instance == null) {instance = new Singleton();}} }三. Double CheckLock實(shí)現(xiàn)單例
Double CheckLock 雙重鎖判斷機(jī)制(由于JVM底層模型原因,偶爾會(huì)出問題,不建議使用),是在懶漢式單例基礎(chǔ)上發(fā)展而來的。
public class Singleton {private volatile static Singleton instance; // 私有化構(gòu)造器private Singleton(){ } //靜態(tài)工廠方法,雙重鎖判斷機(jī)制public static Singleton newInstance(){if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();} }} return instance;} }四.靜態(tài)內(nèi)部類
線程安全,調(diào)用效率高,可以延時(shí)加載。
總結(jié)
以上是生活随笔為你收集整理的Java单例模式的几种实现方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vscode中如何运行git
- 下一篇: Java线程面试题 Top 53