單例模式詳解

2021-09-19 01:29:01 字數 1050 閱讀 5522

單例模式分為餓漢式單例模式和懶漢式單例模式

//缺點:可能會浪費記憶體資源

class cat

private static cat s=new cat();

private static cat getinstance()

}

//缺點:不會浪費記憶體空間了,但是執行緒不安全

class cat

private static cat s=null;

private static cat getinstance()

return s;

}}

//缺點:雖然執行緒安全了,但是程式的併發度降低了

class cat

private static cat s=null;

private static synchronized cat getinstance()

return s;

}}

//這種寫法使得只有在載入新的物件進行同步,在載入完了之後,

//其他執行緒在第九行就可以判斷跳過鎖的的代價直接到倒數第三行**了

//做到了很好的併發度。

//用到了雙重檢查鎖的思想

//缺點:假設執行緒a執行到了第5行,它判斷物件為空,於是執行緒a執行到第8行去初始化這個物件,

但初始化是需要耗費時間的,但是這個物件的位址其實已經存在了。此時執行緒b也執行到了第5行,

它判斷不為空,於是直接跳到12行得到了這個物件。但是,這個物件還沒有被完整的初始化!

得到了乙個沒有初始化完全的物件。關於這個double-checked lock的討論有很多,目前公認

這是乙個anti-pattern,有待優化,不推薦使用!

class cat

private static cat s=null;

private static cat getinstance()}}

return s;

}}

雙重檢查鎖有什麼問題?原因是什麼?如何解決?

單例模式詳解

單例模式的意思就是只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。1.單例模式的要點 顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。2.單例模式的優點 1.例項控制 si...

單例模式詳解

單例模式是設計模式中比較常用的,今天我要詳細的了解一下,並且進行一些比較 public class singleton public static singleton getinstance catch interruptedexception e 單例模式的精髓就在這,類的內部可以new inst...

單例模式 詳解

保證乙個類僅有乙個例項,並且提供乙個訪問它的全域性訪問點 在該例項不存在的情況下,可以通過乙個方法建立乙個類來實現建立類的新例項 如果例項已經存在,它會簡單返回該物件的引用 建立型模式 var singleton function return var singlea singleton.getin...