之前說到的懶漢式可以延遲載入,但是會有執行緒安全的問題,解決的辦法是新增synchronized關鍵字,但是這樣就會有效能的問題,每次都要同步而且都要判斷,會降低訪問速度。下面的餓單例模式雙重鎖檢查連線資料庫可以解決這個問題。
「雙重檢查加鎖」就是不是上來就對**進行同步,而是首先判斷是不是存在,如果存在那麼就直接返回,如果不存在然後進行同步,生成物件。這樣一來只需要同步一次,從而減少了在多次同步的情況下進行判斷所浪費的時間。「雙重檢查加鎖」的建立需要乙個關鍵字「volatile」,他的意思是被這個關鍵字修飾的變數的值,將不被本地執行緒快取,所以對變數的讀寫都是直接操作共享記憶體,從而確保在多執行緒的情況下正確處理該變數。
public class dbutils public static dbutils getinstance() } } return instance; } public connection getconnection() catch (classnotfoundexception e) catch (sqlexception e) return connection; } public static void main(string args) throws sqlexception long end = system.currenttimemillis(); system.out.println("the time spend on connect database: " + (end - begin)); } }
Java設計模式 單例模式
單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...
java設計模式 單例模式
這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單 一 獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件 皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這...
java設計模式 單例模式
單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...