java中單例模式的實現

2021-08-07 05:51:54 字數 1256 閱讀 9009

lazy loaded thread-safe單例模式實現

dcl (double checked locking 實現法) double checked locking ,顧名思義,就是雙檢查法,檢查例項instance是否為null或者已經例項化了。

public

class doublecheckedlockingsingleton

}return instance;

}}

注:synchronized(this)與synchronized(classname.class)區別

lazy initialization holder class 模式實現法

package 單例模式;

public

class

singleton

/*** 私有化構造方法

*/private

singleton()

public

static singleton getinstance()

}

當getinstance方法第一次被呼叫的時候,它第一次讀取singletonholder.instance,導致singletonholder類得到初始化;而這個類在裝載並被初始化的時候,會初始化它的靜態域,從而建立singleton的例項,由於是靜態的域,因此只會被虛擬機器在裝載類的時候初始化一次,並由虛擬機器來保證它的執行緒安全性。這個模式的優勢在於,getinstance方法並沒有被同步,並且只是執行乙個域的訪問,因此延遲初始化並沒有增加任何訪問成本。

注:關於延遲初始化(lazy loaded)

「除非絕對必要,否則就不要延遲初始化」。延遲初始化是一把雙刃劍,它降低了初始化類或者建立例項的開銷,卻增加了訪問被延遲初始化的域的開銷,考慮到延遲初始化的域最終需要初始化的開銷以及域的訪問開銷,延遲初始化實際上降低了效能。

靜態工廠實現法

public

class singleton

public

static singleton getsingleton()

}

static關鍵字:在載入類的過程中完成變數的記憶體分配

final關鍵字:描述變數為常量,不會被改變

在類載入時就將instatnce 建立好,在程式中呼叫的都是已經建立好的例項。

java實現單例模式

1.餓漢式 public class singletonclass private singletonclass 這種方式基於 classloder 機制避免了多執行緒的同步問題,不過,instance 在類裝載時就例項化,雖然導致類裝載的原因有很多種,在單例模式中大多數都是呼叫 getinstan...

實現單例模式(Java)

題目 設計乙個類,我們只能生成該類的乙個例項 說明 只能生成乙個例項的類是實現了singleton 單例模式 的型別。由於設計模式在物件導向程式設計中有著舉足輕重的作用,因此很多公司都會考察。在眾多模式中,singleton模式是唯一乙個能夠用十幾行 完整實現的設計模式,因此此題目很常見 餓漢式單例...

單例模式 Java實現

顧名思義,餓漢法就是在第一次引用該類的時候就建立物件例項,而不管實際是否需要建立。如下 publicclasssingleton publicstaticgetsignleton 這樣做的好處是編寫簡單,但是無法做到延遲建立物件。但是我們很多時候都希望物件可以盡可能地延遲載入,從而減小負載,所以就需...