首先明確一點,單例模式的主旨在於乙個類只有乙個物件
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...