單例模型
定義:保證一個類僅有一個實例榴徐,并且提供一個全局訪問點
類型:創(chuàng)建型
單例-使用場景
? ? 想確保任何情況下都絕對只有一個實例
?優(yōu)點
? 在內(nèi)存里只有一個實例,減少了內(nèi)存開銷
?可以避免對資源的多重占用
?設(shè)置全局訪問點,嚴(yán)格控制訪問
缺點?
沒有接口,需要擴展代碼
單例-懶漢型
懶漢模式是線程不安全的,當(dāng)兩個線程訪問骑丸,是線程不安全。驗證線程不安全 實現(xiàn)Runnable 在Test類運行Tread
使用idea中的debugThread,模式干預(yù)線程執(zhí)行順序通危,得知線程是不安全的
避免線程不安全方式
使用synchronized解決此問題 但是synchronized有額外的鎖開銷铸豁。使用doubleCheck方式解決額外的開銷
在單例中的單線程下的Double Check的執(zhí)行
單線程執(zhí)行?
多線程執(zhí)行
使用volatile關(guān)鍵字使內(nèi)存共享,完全解決懶漢模式的線程不安全問題