1. 程式人生 > >單例模式中,惡漢式和懶漢式有哪些區別。各使用在哪裡?為什麼說推薦使用惡漢式

單例模式中,惡漢式和懶漢式有哪些區別。各使用在哪裡?為什麼說推薦使用惡漢式

餓漢式:
        public class Singleton{
            private static Singleton singleton = new Singleton ();
            private Singleton (){}
            public static Singleton getInstance(){return singletion;}
       } 

     懶漢式:
       public class Singleton{
            private static Singleton singleton = null;

            public static synchronized synchronized getInstance(){
                 if(singleton==null){
                     singleton = new Singleton();
                 }
                return singleton;
            }
       } 

  比較:
         餓漢式是執行緒安全的,在類建立的同時就已經建立好一個靜態的物件供系統使用,以後不在改變
          懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪問不是執行緒安全的

          推薦使用第一種 
從實現方式來講他們最大的區別就是懶漢式是延時載入,
他是在需要的時候才建立物件,而餓漢式在虛擬機器啟動的時候就會建立,
餓漢式無需關注多執行緒問題、寫法簡單明瞭、能用則用。但是它是載入類時建立例項(上面有個朋友寫錯了)、所以如果是一個工廠模式、快取了很多例項、那麼就得考慮效率問題,因為這個類一載入則把所有例項不管用不用一塊建立。
懶漢式的優點是延時載入、缺點是應該用同步(想改進的話現在還是不可能,比如double-check)、其實也可以不用同步、看你的需求了,多建立一兩個無引用的廢物件其實也沒什麼大不了。

相關推薦

模式懶漢式哪些區別使用在哪裡?為什麼說推薦使用

餓漢式:        public class Singleton{            private static Singleton singleton = new Singleton ();            private Singleton (){}  

模式懶漢式什麼區別適合用在哪裡?為什麼說推薦用餓模式

 餓漢式:        public class Singleton{            private static Singleton singleton = new Singleton ();            private Singleton (){}            public

spring模式執行緒安全問題

@RequestMapping(value = "getPsdbData", method = RequestMethod.POST) public Map<String, Object> getPsdbData(String key,HttpServletRequest reques

在Pythonval、exec compile 什麼區別

基本上 eval 上用來評估一個動態生成的 Python 表示式;exec 額外的用於執行動態生成的 python 程式碼。 eval 和 exec 有以下兩個差異 eval 只接受一個表示式,exec 可以接受一個包含了 python 語句的程式碼塊: loops, try: except:, clas

Java基礎 Runtime 用了模式的餓

face ring lang run ice ffi new es2017 obj 禮悟: 好好學習多思考,尊師重道存感恩。葉見尋根三返一,活水清源藏於零。 虛懷若谷良心主,皓月當空自在王。願給最苦行無悔,誠勸且行且珍惜。

模式的餓懶漢式

img image bubuko 圖片 bsp 懶漢 餓漢式 單例模式 http 餓漢式單例: 懶漢式單例 單例模式中的餓漢式單例和懶漢式單例

C++ 模式懶漢式與餓

應該都知道一個單例模式怎樣去實現: 1、建構函式宣告為private或protect防止被外部函式例項化。 2、提供一個全域性的靜態方法(全域性訪問點)。 3、內部儲存一個private static的類指標儲存唯一的例項,例項的動作由一個public的類方法代勞,該方法也

模式的懶漢模式模式區別

單例模式在我們開發中經常會用到的,不知道你所喜歡用餓漢模式還是喜歡懶漢模式呢?為什麼會出現有兩種方式來實現單例模式? 我看這其中必蹊蹺,你怎麼看? 大家都知道的是:懶漢模式會通過 判 null,然後 new 出一個例項,也就是懶漢模式會延遲加載出例項物件。還

Java模式的飽

Java中單例模式是筆試的常見題目,包括飽漢式和飢漢式,具體程式碼實現如下:飽漢式:public class SingleTon { private SingleTon(){} priv

模式懶漢式區別

1、餓漢式是在單例類的例項在JVM啟動時就建立好了,懶漢式則是在第一次訪問單例類的例項時才去建立,即可以把餓漢式看成是預載入,懶漢式則為延遲載入; 示例程式碼: public class EagerSingleton { private static final Eag

java模式懶漢式區別

餓漢式: 設計思想:構造方法私有,這樣就保證了在外部是無法例項化物件的;然後先在內部定義一個靜態常量物件,再寫一個static方法來返回這個物件,這樣就保證是一個物件了。 【程式碼實現】 public class HungryManSingleton { /**

Java面試題之在多線程情況下模式懶漢什麽問題呢?

餓漢模式 問題 之間 static 代碼 clas ava public 餓漢 懶漢模式和餓漢模式: public class Demo { //private static Single single = new Single();//餓漢模式

模式懶漢模式與餓模式

/** * @author 萬星明 * @version 建立時間:2018年10月26日 下午4:32:10 * 請編寫一個單例模式,類名自己定義(不允許出現無意義命名)。 * 分別用懶

你所不知道的模式多線程並發在模式的影響

影響 編程問題 rop key 是我 提升 註意 特性 是不是 單例對象(Singleton)是一種常用的設計模式。在Java應用中,單例對象能保證在一個JVM中,該對象只有一個實例存在。這樣的模式有幾個好處: 1、某些類創建比較頻繁,對於一些大型的對象,這是一筆很大的系

模式為什麽用枚舉更好

cells 變量 講解 pad table resolv 單例模式 關鍵字 comm 枚舉單例(Enum Singleton)是實現單例模式的一種新方式,盡管單例模式在java中已經存在很長時間了,但是枚舉單例相對來說是一種比較新的概念,枚舉這個特性是在Java5才出現的,

模式的雙重檢查加鎖

本文是在學習單例模式時遇到的問題 在多執行緒中,如何防止單例模式被多次例項,當然是要加鎖啦。但是加了鎖就意味著執行緒雖然安全,但效率肯定會變低,這是,就出現了雙重檢查加鎖。但看到這段程式碼,我又有疑問了? public class Singleton { private vo

模式成員變數為什麼一定要是私有的private

package danLi; public class AA { public static AA aa = new AA(); private AA() {} } //------------------------------------------ package

模式靜態類成員變數初始化問題

    最近做一個專案,C++語言,使用到了單例模式做設計。在具體編寫程式碼時,使用了靜態成員變數和靜態函式。程式碼如下: class Camera { private: //(省略若干程式碼) static Camera* pCamera ; //(省略若干

模式可能存在的一些問題(執行緒安全問題)

單例的設計模式中,一些程式碼的寫法會存線上程安全的問題,舉例如下:(1)單例模式的懶漢式[執行緒不安全,不可用] public class Singleton { private static Singleton instance=nu

全域性變數誤用導致模式的多次銷燬例項產生coredump

最近遇到一個問題,產生了coredump, 用gdb看也沒看出真正原因,合作方同事提醒才看出來。 模擬了一下出錯場景,程式碼如下:   class Person{ private: int *m_data; static Person *