三種單利模式

2021-08-30 09:21:18 字數 926 閱讀 3720

模式一:

class singleton2 

private static singleton2 instance;

public static singleton2 getinstance()

return instance;

}}

不用說,大家也知道,這種在單執行緒程式中是沒什麼問題的,但多執行緒程式中,則可能會建立出2個或多個物件.

不同步的話, 對於懶漢式的, 就是在, 這個類的例項還沒有建立的時候, 2個執行緒同時去呼叫getinstance, 這時, 由於沒有同步鎖, 有可能會建立出2個例項來。

對於餓漢式, 由於例項是在load class的時候建立的, 所以就沒有這個問題。 當然, 就是2個執行緒採用了不同的class loader.

當然, 無論餓漢還是懶漢, 機率都不高, 但機率低不代表不會出錯, 邏輯上也不對, 因此, 程式設計者還是應該避免。

模式二:

public class singleton 

private static singleton instance =new singleton();

public static singleton getinstance()

}

這種很顯然沒有前者的問題.

模式三:

public class singleton 

public static singleton getinstance()

}

在模式2中,不管我們是不是呼叫getinstance()都會存在乙個例項在記憶體中,而在模式3中,

只有我們呼叫了getinstance(),才會建立唯一的例項到記憶體中.並且也解決了模式1中多執行緒的問題.

解決的方式是利用了classloader的特性

三種工廠模式

本文介紹設計模式中的工廠模式。工廠模式,顧名思義,就是本來我們需要某樣東西,需要自己造,可有了工廠呢?我需要該東西時,只需告訴工廠,工廠就會生產該東西,一定程度上,把使用者和生產者分開了。解耦了。追本溯源,假設我們現在有乙個類a,類a裡需要類b的乙個物件,一般的處理是這樣,b b new b 但這樣...

vi三種模式

vi 編輯器 寫原始檔 vi 檔名 三種模式 命令模式 wq 儲存退出 q 強制退出 w 儲存 q 退出 插入模式 a i o a i o esc 可視模式 v 可視 ins 替換 y p d 複製作用 gcc 編譯器 翻譯別的型別 gcc 原始檔 a.out gcc 原始檔 o 名字 編譯錯誤時不...

Linu epoll 三種模式

io操作方式 阻塞等待 好處 不占用cpu寶貴的時間片 缺點 同一時刻只能處理乙個操作,效率低 非阻塞,忙輪詢 好處 提高了程式的執行效率 缺點 需要占用更多的cpu和系統資源 解決方案 1.select 最高鏈結1024個檔案描述 poll 陣列無限制 只會提示有幾個客戶端鏈結,需要伺服器遍歷找出...