设计延迟加载的“单例设计模式”
生活随笔
收集整理的這篇文章主要介紹了
设计延迟加载的“单例设计模式”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
今天看畢老師的線程部分,學到了如何設計延遲加載的單例設計模式;
單例設計模式分兩種:
1、餓漢模式
2、懶漢模式
?
先上餓漢式代碼:
?
// 餓漢式 class Single{ private static final Single s = new Single(); private Single(){} public static Single getInstance(){ return s; } }?
餓漢模式,在私有化類的時候就加載了實例,這種模式對資源消耗較大,所以衍生出了懶漢模式;
?
接下來懶漢式:
?
// 懶漢式 class Single{ private static final Single s = null; private Single(){} public static Single getInstance(){ // Single 前面加上 synchronized 可以解決安全隱患的問題,但是比較低效 // 使用同步代碼塊,解決效率問題,由于是靜態方法,不能寫this,所以“鎖”要用 Single.class if( s == null){ // 使用雙重判斷,解決效率問題 synchronized(Single.class){ if( s == null ){ s = new Single(); // 對象實例化被延遲 } } } } }懶漢式特點:實例會延遲加載。
?
存在問題:
如果多線程訪問時,會出現安全隱患;
解決方法:此時要使用同步代碼塊包裹實例化代碼,但是稍微低效,可以用雙重if判斷,解決效率問題
使用的鎖:是用該類所屬的字節碼為對象鎖;
?
轉載于:https://www.cnblogs.com/jackchiang/archive/2007/07/12/4585236.html
總結
以上是生活随笔為你收集整理的设计延迟加载的“单例设计模式”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flash如何制作跟随鼠标移动拉伸的蜘蛛
- 下一篇: ELDataQuery 基于.NET 2