單例模式解析

2021-07-22 10:06:48 字數 1575 閱讀 6014

1、餓漢模式

優點:在類初始化時已經例項化完成,呼叫時較快;執行緒安全

缺點:不管後期是否使用,都進行了一次初始化,有可能浪費資源

public

class singleton //建構函式私有化

public

static singleton getinstance()

}

2、懶漢模式(不推薦)

優點:只有在第一次使用時才會被初始化,一定程度上節約了資源

缺點:第一次載入時需要及時進行例項化,反應稍慢; 每次呼叫getinstance都進行同步,造成不必要的開銷

public

class singleton //建構函式私有化

private

static singleton minstane=null;

public

static synchronized singleton getinstance()

return minstance;

}}

3、dcl(double checklock)

優點:第一次使用時才被初始化,節約資源; 執行緒安全; 第一次判null主要是為避免了不必要的同步

缺點:第一次載入時需要及時進行例項化,反應稍慢; 極低概率dcl失效,難以定位問題(jdk 1.5之後,minstance新增volatile關鍵字可解決此問題)

ps: dcl失效問題可參考

public

class singleton //建構函式私有化

public

static singleton getinstance() } }

return minstance;

}}

public

class singleton //建構函式私有化

public

static singleton getinstance()

private

static

class singletonholder

}

5、列舉單例(推薦)

優點:寫法簡潔; 列舉例項的建立是執行緒安全的; 並且在任何情況下它都是乙個單例,其他幾種方式在反序列化時會重新生成物件,要想防止反序列化,就要加入額外的**( private object readresolve() throws objectstreamexception )

public

enum singleton

}

6、使用容器實現單例模式(有興趣可以深入了解)

public

class singletonmanager

public

static

void

registerservice(string key , object instance)

}public

static object getservice(string key)

}

單例模式解析

什麼是單例模式?在整個jvm執行週期中只有乙個例項的物件。用法 執行緒安全 double check public void class singleton 3.實現雙重檢查鎖構造單例 public singleton getinstance return instance 為什麼要使用雙重檢查鎖?...

單例模式完全解析

本文將 單例模式的各種情況,並給出相應的建議。單例模式應該是設計模式中比較簡單的乙個,但是在多執行緒併發的環境下使用卻是不那麼簡單了。首先看最原始的單例模式。顯然這個寫法在單執行緒環境下非常好,但是多執行緒會導致多個例項出現,這個大家都能理解。最簡單的改造方式是新增乙個同步鎖。顯然上面的方法避免了併...

解析單例模式(1)

什麼是單例模式 保證乙個類只有乙個例項,並且對外提供乙個全域性訪問點 單例模式意義 單例模式可以嚴格控制客戶怎麼訪問以及何時訪問。單例模式的注意點 可以被繼承,單例模式是有狀態的 public class singletest 私有建構函式保證不能通過建構函式生成類物件 public static ...