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 ...