模式一:
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 陣列無限制 只會提示有幾個客戶端鏈結,需要伺服器遍歷找出...