天天看點

單例模式的懶漢模式為什麼在高并發中會出現問題?一個代碼例子告訴你

我們對于單例模式我覺得是23種設計模式中大家最熟悉的一個,但是我們真的了解清楚了嗎?小編最近才想到都說懶漢模式不合适出現在高并發中,會出現并發問題,于是小編研究了一下才發現,今天就帶大家用一個例子來證明是不是高并發會出現錯誤!!

- 優點:

懶漢式相對于餓漢式的優勢是支援延遲加載

- 缺定:

懶漢式有性能問題,不支援高并發

- 手機數量類:

- 高并發進行手機秒殺

- 搶購結果展示

單例模式的懶漢模式為什麼在高并發中會出現問題?一個代碼例子告訴你

從上面的結果來看,我們很明顯的看出來,懶漢式在面對高并發的時候,出現了并發錯誤,也就是秒殺的買超了問題,我們這裡是三個線程買到的都是一個手機,而不是三個手機。原因是因為三個線程可能都拿到了時間片,然後再懶漢式中判斷phone == null,他們三個線程都以為為空都建立了一個對象,這樣就成了new了三個對象,其實隻能存在一個對象。這是小編自己的一些了解,如果有不恰當的地方,還請指出!!