單列模式幾種方法分析

2021-07-30 06:56:21 字數 1574 閱讀 4747

方法一:懶漢式(懶漢式對於單執行緒而言,推薦使用,但是對於多執行緒,可能會出現 資料不同步,也可能會建立出好幾個物件,因此不建議使用)

public class singlemodeltwo ;

/*** 執行緒不安全

* @return

*/public static singlemodeltwo getinstance()

return singlemodeltwo;

}}

方法二:顯示鎖(由於在方法前邊加了顯示鎖,因此在呼叫這個方法是,因此在多執行緒同時呼叫改方法時,它時一遍一遍執行,不能達到併發,效率低下

public class singlemodeltwo ;

/*** 執行緒安全 效率低下

* @return

*/public static synchronized singlemodeltwo getinstancetwo()

return singlemodeltwo;

}

方法三:雙重檢驗鎖(它在判斷singlemodeltwo為空之後加了顯示鎖,當該方法第一次執行完成之後,singlemodel已經不為空,因此再次呼叫時,顯示鎖**不被呼叫,所以效率相對方法二有所提高,推薦使用

public class singlemodeltwo ;

/*** 執行緒安全 效率相對較低

* 雙重檢驗鎖

*/public static singlemodeltwo getinstancethree()

} return singlemodeltwo;

}}

方法四:餓漢式(它直接在類裡邊將物件例項化,速度快,這樣在不加鎖的情況下保證了執行緒安全,但是由於沒有延緩機制,所以在多執行緒併發的情況下,可能會過度消耗jvm記憶體,使得執行效率變低。。。。。有時候在不使用改類物件時,而是用其他靜態方法,這個時候例項化物件也是沒有用的,只能增加jvm開銷)

public class singlemodelone ;

public static singlemodelone getinstancesinglemodel()

}

方法五:靜態內部類( 它是在餓漢式基礎之上,增加靜態內部類是現實延遲載入,保證jvm記憶體不被過度消耗,速度快, 推薦使用)

public class singlemodelthree 

private singlemodelthree(){}

public static class getsingle

}

注:最後在提一點,在網上看到有用列舉的,但是我覺得不是很常用,在此也沒有做過多研究。

靜態方法以及靜態變數都是在類載入時被一起載入的,所以說有時候你用類物件第一次去呼叫靜態方法,其他靜態方法也會被載入

單列模式 實現單列模式的五種方法

何為單列模式不管例項化你建立多少的物件,我只給你們返回的總是哪乙個 第一種 通過類方法實現class mysql object instance none def init self,ip,port self.ip ip self.port port classmethod defsingleton...

設計模式 單列模式 其他的幾種方式

單列模式 餓漢模式 靜態 塊的實現 優點 沒有加鎖,執行效率會提高。它基於classloder機制避免了多執行緒的同步問題 缺點 類載入時就初始化,沒有達到lazy loading的效果,浪費記憶體。public class singletonstaticdemo private singleton...

分析js跳出迴圈的幾種方法

for var i 519 i 550 i console.log i alert i document.write i 當i 521的時候,直接退出for這個迴圈。這個迴圈將不再被執行 迴圈 switch語句 for var i 5 i 0 i console.log i alert i docu...