單例設計模式

2021-08-16 19:26:14 字數 1715 閱讀 7189

單例類必須自己建立自己的唯一例項。

單例類必須給所有其他物件提供這一例項。

這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,以避免兩個列印作業同時輸出到印表機中。每台計算機可以有若干通訊埠,系統應當集中管理這些通訊埠,以避免乙個通訊埠同時被兩個請求同時呼叫。總之,選擇單例模式就是為了避免不一致狀態。

//餓漢模式:執行緒安全,耗費資源。

public

class hugersingletontest

private

hugersingletontest()

}

public

class singleton

public

static singleton getinstance()

private

singleton()

}

public

class singleton

return ourinstance;

}private

singleton()

}

public

class singleton

return ourinstance;

}private

singleton()

}

public

class

singleton }}

return ourinstance;

}private

singleton()

}

public

class singleton

public synchronized static singleton getinstance()

private

singleton()

}

enum singletontest 

}

其實建立乙個物件,往往包含三個過程。 

對於singleton = new singleton(),這不是乙個原子操作,在 jvm 中包含的三個過程。

但是,由於jvm會進行指令重排序,所以上面的第二步和第三步的順序是不能保證的,最終的執行順序可能是 1-2-3 也可能是 1-3-2。如果是 1-3-2,則在 3 執行完畢、2 未執行之前,被l另乙個執行緒搶占了,這時 instance 已經是非 null 了(但卻沒有初始化),所以這個執行緒會直接返回 instance,然後使用,那肯定就會報錯了。

針對這種情況,我們有什麼解決方法呢?那就是把singleton宣告成 volatile ,改進後的懶漢式執行緒安全(雙重檢查鎖)的**如下:

public

class

singleton }}

return ourinstance;

}private

singleton()

}

//餓漢式單例設計模式

public

class runtime

private

runtime()

//省略很多行

}

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...