設計模式 單例模式

2021-07-10 08:41:56 字數 1293 閱讀 4505

單例模式:確保乙個類只有乙個例項,並提供全域性訪問點。

通過私有化構造方法,我們可以使乙個類不能在外部被例項化。

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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...