單例模式:確保乙個類只有乙個例項,並提供全域性訪問點。通過私有化構造方法,我們可以使乙個類不能在外部被例項化。
public
class myclass
}
public
class main
}
public
class singleton
public
static singleton getinstance()
return instance;}}
單這樣實現當多執行緒的情況下會存在問題,如果多個執行緒同時getinstance
,同時走到了if(instance==null)
這一步,那麼這幾個執行緒都將進入if,就建立了多個物件。這是我們不能容忍的。
public
class singleton
public
static synchronized singleton getinstance()
return instance;}}
在getinstance
方法上新增synchronized
關鍵字,這樣就不存在多個執行緒同時進入該方法了。
但是,這樣同樣存在乙個問題,每乙個進入這個方法都要同步,如果getinstance
需要拼房的執行,這樣就造成了一些效能浪費。
public
class singleton
public
static singleton getinstance()
}
放棄延遲例項化,在jvm載入該類的時候,我們就建立唯一的例項,這樣任何執行緒訪問都沒問題。
public
class singleton
public
static singleton getinstance()}}
return instance;}}
這樣寫**,大量減少了同步帶來的效能消耗,又防止了多執行緒帶來的問題。
volatile
:用volatile修飾的變數,執行緒在每次使用變數的時候,都會讀取變數修改後的最的值。
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...