單例模式詳解

2021-07-04 21:56:48 字數 1545 閱讀 2531

單例模式是設計模式中比較常用的,今天我要詳細的了解一下,並且進行一些比較

public

class singleton

public

static singleton getinstance() catch (interruptedexception e)

//單例模式的精髓就在這,類的內部可以new

instance = new singleton();

}return instance;

}//對這種寫法的多執行緒的不安全的測試

public

static

void

main(string args) ;

};thread thread2 =new thread();

};thread1.start();

thread2.start();

}}

按照單例模式,每個類只有乙個物件,就是hashcode應該是一樣的。結果卻是不一致,這樣的單例模式在多執行緒下是不對的。

21281040

12271841

解決真個問題最直接的方法就是同步(synchronized)

public

static

synchronized singleton getinstance()

return instance;

}

public

static singleton getinstance()

}return instance;

}

這兩種方法其實差不多,都是在呼叫getinstance()進行同步,加鎖。可以解決多執行緒下的安全性,但是每次呼叫getinstance()方法就會加鎖解鎖,是不是效率太低呢,下面通過兩層判斷來提高效率

public

static singleton getinstance() }}

return instance;

}

上面的模式俗稱懶漢式,呼叫getinstance()才會建立物件。

下面的是餓漢式,在類建立的同時就已經建立好乙個靜態的物件。

//餓漢式在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,所以天生是執行緒安全的

public

class singleton

public

static singleton getinstance()

}

通過靜態內部類的方式,實現執行緒安全。

public

class singleton

public

static singleton getinstance()

//靜態內部類只會被載入一次

static class instanceholder

}

這幾種基本就是單例常用的方式

單例模式詳解

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

單例模式 詳解

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

單例模式詳解

我們在設計某些類時,根據需求,有時只需要乙個例項,不想過多浪費記憶體,這就可以通過單例項的方式。如,我們在使用windows的任務管理器時,彈出的始終是乙個視窗,這裡如果物件採用多例項模式,那麼就會彈出多個視窗,會出現下述兩種情況 第一,如果這些視窗顯示的內容不一致,則意味著在某一瞬間系統有多個狀態...