單例模式中,餓漢式和懶漢式有什麼區別?各適合用在哪裡?為什麼說推薦用餓漢模式?
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
單例模式中,惡漢式和懶漢式有哪些區別。各使用在哪裡?為什麼說推薦使用惡漢式
餓漢式: public class Singleton{ private static Singleton singleton = new Singleton (); private Singleton (){}
單例模式中餓漢式和懶漢式的區別
1、餓漢式是在單例類的例項在JVM啟動時就建立好了,懶漢式則是在第一次訪問單例類的例項時才去建立,即可以把餓漢式看成是預載入,懶漢式則為延遲載入; 示例程式碼: public class EagerSingleton { private static final Eag
JAVA單例設計模式(餓漢式和懶漢式的區別)
定義:確保一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 型別:建立類模式 類圖: 類圖知識點: 1.類圖分為三部分,依次是類名、屬性、方法 2.以<<開頭和以>>結尾的為註釋資訊 3.修飾符+代表public,-代表p
Java中單例設計模式,餓漢式和懶漢式
set tin desc 驅動 ack 情況下 zed 獲取 java反射機制 Java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這裏主要介紹三種:懶漢式單例、餓漢式單例、登記式單例。 單例模式有以下特點: 1、單例類只能有一個實例。 2、單例類必須
Java——多執行緒基本使用(三) 餓漢式和懶漢式的單例設計模式,多執行緒之間的通訊
這一則部落格主要寫的是單例設計模式,與實現多執行緒之間的通訊等等~ 1.單例設計模式:保證類在記憶體中只有一個物件 2.保證類在記憶體中只有一個物件 &
Java中單例模式之餓漢式和懶漢式
單例模式顧名思義,就是隻能建立一個物件,這裡就限制了它的構造方法,不能隨便new了。所以用構造方法用private修飾。餓漢式和懶漢式通過名字也是可以區分的。餓漢式,餓了就主動去找食物了,就直接主動建立一個物件。然後通過公共的方法暴露給外部呼叫。懶漢式,懶了就用的時候再去建立
單例模式的實現(餓漢式和懶漢式)
null cte get pri single singleton ins 安全 tin 1.懶漢模式。 class Singleton { private: static Singleton* m_instance; Singleton(
單例模式:餓漢式和懶漢式
餓漢式:載入類的時候,就建立了物件 /** * 餓漢式:載入類的時候,就建立了物件 */ public class Ehanshi { // 建立物件 private static Ehanshi ehanshi = new Ehanshi(); // 無參
單例設計模式之餓漢式和懶漢式
1.設計模式? 設計模式是在大量的實踐中總結和理論化之後優選的程式碼結構,程式設計風格,以及解決問題的思考方式。 2.單例模式的概念? 單例模式,我們首先必須將類在一個虛擬機器中只能產生一個物件,因此應該做到以下幾步:a:私有化構造方法,這樣在該類的外邊就不能用ne
單例模式之餓漢式和懶漢式
常見的單例模式有兩種:餓漢式;懶漢式。 餓漢式程式碼如下: /** * 單例模式之餓漢式 * @author leon * @time 2018年4月27日 下午2:28:14 */ public class HungrySingleton {
設計模式:單例模式 (關於餓漢式和懶漢式)
定義 單例模式是比較常見的一種設計模式,目的是保證一個類只能有一個例項,而且自行例項化並向整個系統提供這個例項,避免頻繁建立物件,節約記憶體。 單例模式的應用場景很多, 比如我們電腦的作業系統的回收站就是一個很好的單例模式應用,電腦上的檔案、視訊、音樂等被刪除後都會進入到回收站中;還有計算機中的印表機也是採用
餓漢式和懶漢式區別
從名字上來說,餓漢和懶漢, 餓漢就是類一旦載入,就把單例初始化完成,保證getInstance的時候,單例是已經存在的了, 而懶漢比較懶,只有當呼叫getInstance的時候,才回去初始化這個單例。 另外從以下兩點再區分以下這兩種方式: 1、執行緒安全: 餓
js中,indexOf()、substring()和substr()的區別
index length world mic 返回結果 document -s start star 1. indexOf() 返回指定的字符串在字符串首次出現的位置。 比如 var str="Hello world!" documen
在Python中,val、exec和 compile 有什麼區別?
基本上 eval 上用來評估一個動態生成的 Python 表示式;exec 額外的用於執行動態生成的 python 程式碼。 eval 和 exec 有以下兩個差異 eval 只接受一個表示式,exec 可以接受一個包含了 python 語句的程式碼塊: loops, try: except:, clas
java單例模式中餓漢式與懶漢式區別
餓漢式: 設計思想:構造方法私有,這樣就保證了在外部是無法例項化物件的;然後先在內部定義一個靜態常量物件,再寫一個static方法來返回這個物件,這樣就保證是一個物件了。 【程式碼實現】 public class HungryManSingleton { /**
Java實現單例模式之餓漢式、懶漢式、列舉式,帶測試。
Java實現單例的3種普遍的模式,餓漢式、懶漢式、列舉式。 具體程式碼如下: package com.lcx.mode; /** * * 餓漢式單例,不管以後用不用這個物件,我們一開始就建立這個物件的例項, * 需要的時候就返回已建立好的例項物件,所以比較飢餓,
JAVA中的餓漢式和飽漢式單例模式及jdk中Runtime類的單例模式實現方式詳解
一、描述 單例模式是一種非常常見的設計模式,即一個類只能有一個物件(例項),一般通過將該類的構造器私有化,來阻止在該類外建立該類的物件,並提供給外界一個唯一的物件(這個物件在該類中建立)。 java中的單例模式常見的有兩種實現方式,一種是惡漢方式,即將該類物件
java學習之單例模式(餓漢式與懶漢式)
分用 單例設計 單例 null 並發 auth 設計 pack 過多 ---恢復內容開始--- 設計模式:解決某一類問題最行之有效的方法 java中有23種設計模式 今天學習其中一種:單例設計模式:解決一個類在內存只存在一個對象 想要保證對象唯一。 1.為了避免其他程序
對象初始化過程與單例設計模式(餓漢式與懶漢式)
得到 延時 兩個 都是 person 其他 導致 最大 類屬性 1.對象初始化過程:(先加載類到內存,然後加載類屬性,成員方法) 定義一個類Person, 在new Person("zhangsan",20); 初始化過程: 因為new 用到Person.clas