java單例模式懶漢和餓漢 單例中懶漢和餓漢的本質(zhì)區(qū)別?
單例中懶漢和餓漢的本質(zhì)區(qū)別?1. 饑餓的中國(guó)風(fēng)格是線程安全的。在創(chuàng)建類(lèi)的同時(shí),已經(jīng)創(chuàng)建了一個(gè)靜態(tài)對(duì)象供系統(tǒng)使用,以后不會(huì)更改。Lazy如果實(shí)例對(duì)象是在沒(méi)有同步的情況下創(chuàng)建的,那么對(duì)該對(duì)象的訪問(wèn)就不是線
單例中懶漢和餓漢的本質(zhì)區(qū)別?
1. 饑餓的中國(guó)風(fēng)格是線程安全的。在創(chuàng)建類(lèi)的同時(shí),已經(jīng)創(chuàng)建了一個(gè)靜態(tài)對(duì)象供系統(tǒng)使用,以后不會(huì)更改。Lazy如果實(shí)例對(duì)象是在沒(méi)有同步的情況下創(chuàng)建的,那么對(duì)該對(duì)象的訪問(wèn)就不是線程安全的。
2. 在實(shí)現(xiàn)方面,它們之間最大的區(qū)別是延遲加載。它在需要時(shí)創(chuàng)建對(duì)象,而饑餓模式是在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的。饑餓模式不需要注意多線程。書(shū)寫(xiě)方法簡(jiǎn)單明了,可以使用。此單例對(duì)象僅在實(shí)際使用時(shí)創(chuàng)建?!梆囸I人類(lèi)型”是在一開(kāi)始就創(chuàng)建這個(gè)單例對(duì)象,不管它是否有用。
單例模式用法:?jiǎn)卫J绞枪S模式的特例,但它不需要輸入?yún)?shù),總是返回同一對(duì)象的引用。單例模式可以保證系統(tǒng)中某一類(lèi)型對(duì)象的唯一性,即系統(tǒng)中某一類(lèi)只有一個(gè)實(shí)例。
2. 它有廣泛的用途。例如,我們開(kāi)發(fā)了一個(gè)簡(jiǎn)單的留言板。每次用戶留下消息時(shí),他都必須將消息信息寫(xiě)入數(shù)據(jù)庫(kù)。最直觀的方法是每次編寫(xiě)時(shí)都建立一個(gè)數(shù)據(jù)庫(kù)鏈接。
3. 這是一種簡(jiǎn)單的方法,在不考慮并發(fā)性的情況下也是一個(gè)不錯(cuò)的選擇。但事實(shí)上,一個(gè)網(wǎng)站是并發(fā)的,可能會(huì)有大量的并發(fā)操作。如果我們?yōu)槊看螌?xiě)入創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接,系統(tǒng)很容易出現(xiàn)瓶頸,系統(tǒng)的精力將放在維護(hù)鏈接上,而不是直接查詢。這顯然是不可取的。
相反,饑餓的人模式是我將為您創(chuàng)建一個(gè)單一的例子,無(wú)論您是否使用它。
如何理解java中的懶漢式和餓漢式單例?python中有沒(méi)有這種單例模式?
獨(dú)生子女中懶惰和饑餓的人的本質(zhì)區(qū)別如下:
1。饑餓的人是安全的。在創(chuàng)建類(lèi)時(shí),已經(jīng)創(chuàng)建了一個(gè)靜態(tài)對(duì)象供系統(tǒng)使用,以后不會(huì)更改。Lazy如果實(shí)例對(duì)象是在沒(méi)有同步的情況下創(chuàng)建的,那么對(duì)該對(duì)象的訪問(wèn)就不是線程安全的。
2. 在實(shí)現(xiàn)方面,它們之間最大的區(qū)別是延遲加載。它在需要時(shí)創(chuàng)建對(duì)象,而饑餓模式是在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的。饑餓模式不需要注意多線程。書(shū)寫(xiě)方法簡(jiǎn)單明了,可以使用。但是當(dāng)類(lèi)被加載時(shí),它會(huì)創(chuàng)建一個(gè)實(shí)例。因此,如果是工廠模式,緩存了很多實(shí)例,就要考慮效率,因?yàn)橐坏┘虞d了類(lèi),不管是否使用,都會(huì)創(chuàng)建所有實(shí)例。
3. 建立單一目標(biāo)的時(shí)間不同。“l(fā)azy類(lèi)型”是在您真正使用它時(shí)創(chuàng)建這個(gè)單例對(duì)象,而“hungry類(lèi)型”是在開(kāi)始時(shí)創(chuàng)建這個(gè)單例對(duì)象,不管您是否需要它。singleton模式的優(yōu)點(diǎn)是:(1)實(shí)例控制:singleton模式防止其他對(duì)象實(shí)例化自己的singleton對(duì)象副本,從而確保所有對(duì)象訪問(wèn)唯一的實(shí)例。(2) 靈活性:因?yàn)轭?lèi)控制實(shí)例化過(guò)程,所以類(lèi)可以靈活地更改實(shí)例化過(guò)程。2singleton模式的缺點(diǎn)是:(1)開(kāi)銷(xiāo):雖然數(shù)量很少,但是如果每次對(duì)象請(qǐng)求引用時(shí)都需要檢查類(lèi)的實(shí)例是否存在,那么仍然需要一些開(kāi)銷(xiāo)。您可以通過(guò)使用靜態(tài)初始化來(lái)解決這個(gè)問(wèn)題。(2) 可能的開(kāi)發(fā)混亂:當(dāng)使用單例對(duì)象(尤其是類(lèi)庫(kù)中定義的對(duì)象)時(shí),開(kāi)發(fā)人員必須記住他們不能用new關(guān)鍵字實(shí)例化對(duì)象。由于庫(kù)的源代碼可能無(wú)法訪問(wèn),應(yīng)用程序開(kāi)發(fā)人員可能會(huì)意外地發(fā)現(xiàn)自己無(wú)法直接實(shí)例化此類(lèi)。
單例模式中,餓漢式和懶漢式的區(qū)別?為什么推薦說(shuō),用餓漢模式?
另外,我的意思是不能像韭菜那樣一個(gè)接一個(gè)地割,但水稻一般都有再生的能力,這種能力因品種而異。目前,在一些不適宜雙季稻種植的地區(qū),選擇一些再生能力強(qiáng)、生育期適宜的品種,是我國(guó)糧食安全的一項(xiàng)新政策。此外,再生稻第二生長(zhǎng)季化肥、農(nóng)藥用量很少,對(duì)環(huán)境保護(hù)具有積極意義。同時(shí),再生米是相對(duì)比較綠色健康的食品。然而,在地球的任何一個(gè)地區(qū),水稻都不可能像韭菜那樣具有長(zhǎng)期的再生能力,因?yàn)槭軠囟鹊挠绊?,它只能是一年生的草?/p>