目錄
單例模式
懶漢式餓漢式
雙重鎖模式
靜態內部類模式
列舉模式
volatile關鍵字
概念:顧名思義就是只有乙個例項,並且它自己負責建立自己的物件,這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件
特點:類構造器私有,持有自己型別的屬性,對外提供獲取例項的靜態方法
特點:在需要獲取例項物件的時候才去載入
問題:不是執行緒安全,同時兩個執行緒進行獲取例項物件時有可能獲取到不同的物件
package com.anran.example.singleton;
public class lazymode
/*** 唯一獲取當前物件例項的靜態方法
* @return
*/public static lazymode getinstance()
return lazymodes;
}}
特點:在系統載入的時候就會對例項物件進行建立
問題:執行緒安全,但是浪費了記憶體空間
package com.anran.example.singleton;
public class starvingmode
public static starvingmode getinstance()
}
描述:對例項物件進行加鎖操作和原子操作,保證多執行緒在建立物件時阻塞
特點:做到了執行緒安全,延遲初始化,並且多執行緒併發時高效
volatile :保證建立物件時jvm的底層操作不會出現指令重新排序,從而保證第二個執行緒判斷例項物件是否建立時的準確性
package com.anran.example.singleton;
public class doublecheckmodel
public doublecheckmodel getinstance()}}
return doublecheckmodel;
}}
描述:在獲取 例項物件的時候,虛擬機器才去載入靜態內部類並初始化,此時只有乙個執行緒可以獲得物件的初始化鎖,其他執行緒無法進行初始化,保證物件的唯一性
特點:執行緒安全,延遲載入
package com.anran.example.singleton;
public class staticclassmode
public static staticclassmode getinstance()
private static class inner
}
特點:列舉類隱藏了私有的構造器,列舉類的域 是相應型別的乙個例項物件
package com.anran.example.singleton;
public enum enummode
}
保證物件建立在jvm中的執行過程中不會指令重新排序(原子操作)
jvm在建立物件的時候大致可以概括為(分配記憶體空間,初始化物件,外部引用指向記憶體空間),但在jvm實際執行的時候可能因為指令重新排序變成(分配記憶體空間,外部引用指向記憶體位址,初始化物件),此時可能導致物件沒有建立完成就被後續程式使用,導致未知異常。
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...