單例模式詳解 漸進版本

2021-10-04 01:58:39 字數 1066 閱讀 2299

首先明確一點,單例模式的主旨在於乙個類只有乙個物件

1、簡單的單例模式

先寫一種最基本的:

public class singleeasy 

private static singleeasy getinstance()

return singleeasy;}}

這個很好理解,singleeasy == null時才才建立乙個物件,否則直接返回已經建立好的物件。

雖然這種方式看起來完成了單例,但是不安全,或者說他只是在單執行緒的情況下沒問題。原因:

寫個測試類:

public class singletest 

});thread thread2 = new thread(new runnable()

});thread1.start();

thread2.start();}}

執行結果會出現這種情況:

2.多執行緒模式下的單例模式

由於上面的錯誤,所以我們要給getinstance方法加synchronized,保證同一時刻只有乙個執行緒操作此方法。

public class singleeasy 

public static synchronized singleeasy getinstance()

return singleeasy;}}

面試中單例模式寫到這種程度應該有個七八十分的樣子。

3.雙重檢測單例模式

2中的單例基礎上基礎完善。

2中的synchronized是加在方法上的,所以鎖定的是整個方法,假如方法中的還有其他的**需要執行,其實就是影響效率了。所以我們只需要鎖住多執行緒共享的資源就可以。

先上**:

public class singleeasy 

public static singleeasy getinstance()}}

return singleeasy;}}

單例模式詳解

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

單例模式詳解

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

單例模式 詳解

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