高頻面試題 Singleton《單例模式》

2021-10-01 05:59:51 字數 3831 閱讀 1017

直接例項化餓漢式(簡潔直觀)

列舉式(最簡潔)

靜態**塊餓漢式(適合複雜例項化)

懶漢式 : 延遲建立物件

執行緒不安全(適用於單執行緒)

執行緒安全(使用於多執行緒)

靜態內部類形式(適用於多執行緒)

(1)直接例項化餓漢式 , 不管你用不用;

方式:

public

class

singletoneager

}

(2)直接例項化餓漢式 , 不管你用不用;

方式:

public

enum singletoneagerenum

(3)靜態**塊(適合複雜例項化)

方式:

public

class

singletoneagerstatic

catch

(ioexception e)

}private

singletoneagerstatic

(string info)

}

test 結果:
public

class

eagertest

/** * run:

* com.blancsea.singleton.singletoneager@4554617c

* instance

* com.blancsea.singleton.singletoneagerstatic@1540e19d

*/}

(1)單執行緒模式

方式:

public

class

singletonlazy

public

static singletonlazy getinstance()

catch

(interruptedexception e)

instance =

newsingletonlazy()

;}return instance;

}}

(2)單執行緒模式 — test
/**

* 單執行緒模式 執行緒安全

*/singletonlazy s1 = singletonlazy.

getinstance()

; singletonlazy s2 = singletonlazy.

getinstance()

; system.out.

println

(s1)

; system.out.

println

(s2)

; system.out.

println

(s1==s2)

;/**

* run :

* com.blancsea.singleton.singletonlazy@4554617c

* com.blancsea.singleton.singletonlazy@4554617c

* true

*/

(3)多執行緒模式:執行緒阻塞,導致單例失效
/**

* 多執行緒模式:執行緒不安全;

* 執行**增加休眠,導致執行緒阻塞;

*/callable

c =newcallable

()};

executorservice es = executors.

newfixedthreadpool(2

);future

f1 = es.

submit

(c);

future

f2 = es.

submit

(c);

singletonlazy fs1 = f1.

get();

singletonlazy fs2 = f2.

get();

system.out.

println

(fs1)

; system.out.

println

(fs2)

; system.out.

println

(fs1==fs2)

;// run : true / false ;

es.shutdown()

;/**

* run :

* com.blancsea.singleton.singletonlazy@6d6f6e28

* com.blancsea.singleton.singletonlazy@135fbaa4

* false

* or:

* com.blancsea.singleton.singletonlazy@6d6f6e28

* com.blancsea.singleton.singletonlazy@6d6f6e28

* true

*/

(4) synchronized 實現同步解決執行緒不安全問題
public

class

singletonlazysynchronized

public

static singletonlazysynchronized getinstance()

catch

(interruptedexception e)

instance =

newsingletonlazysynchronized()

;}}}

return instance;

}}

(5)執行緒同步 ---- test
callable

c =newcallable

()};

executorservice es = executors.

newfixedthreadpool(2

);future

f1 = es.

submit

(c);

future

f2 = es.

submit

(c);

singletonlazysynchronized fs1 = f1.

get();

singletonlazysynchronized fs2 = f2.

get();

system.out.

println

(fs1)

; system.out.

println

(fs2)

; system.out.

println

(fs1==fs2)

;// run : true / false ;

es.shutdown()

;/**

* run :

* com.blancsea.singleton.singletonlazy@6d6f6e28

* com.blancsea.singleton.singletonlazy@6d6f6e28

* true

*/

(6)靜態內部類

方式:

public

class

singletonlazystatic

private

static

class

inner

public

static singletonlazystatic getinstance()

}

單鏈表的base 高頻面試題

鍊錶是有序的列表,但是它在記憶體中是儲存如下 新增 public class singlelinkedlist 定義singlelinkedlist單鏈表 class singlelinkedlistd temp temp.next temp.next heronode 顯示鍊錶 先判斷為空,遍歷後...

C 高頻面試題

malloc free是c語言的標準庫函式,new delete是c 的運算子。由於malloc free是庫函式而不是運算子,不在編譯器控制許可權之內。對於使用者自定義的物件而言,用maloc free無法滿足動態管理物件的要求。廢話 new是型別安全的,malloc不是。int a new fl...

C 高頻面試題

字首式可以返回物件的引用,而字尾式必須返回物件的值所以導致在大物件產生時產生了較大的複製開銷,因此處理自定義型別的時候盡量使用字首式。a b b a a b 相對於c,c 多了過載 內聯函式 異常處理,擴充套件了物件導向的設計內容 類 繼承 虛函式 模板。c 並不是完全的物件導向,它也可以寫出面向過...