- 相關(guān)推薦
多線(xiàn)程的餓漢式和懶漢式
導(dǎo)語(yǔ):多線(xiàn)程的單例設(shè)計(jì)模式保證某個(gè)類(lèi)中內(nèi)存中只有一個(gè)對(duì)象,分為餓漢式和懶漢式,讓我們了解一下吧!
(1)餓漢式:
class Single
{
private Single(){}//將構(gòu)造函數(shù)私有化,不讓別的類(lèi)建立該類(lèi)對(duì)象
private static final Single s=new Single();//自己建立一個(gè)對(duì)象
public static Single getInstance()//提供一個(gè)公共訪(fǎng)問(wèn)方式
{
return s;
}
}
(2)懶漢式:
class Single
{
private Single(){}
private static Single s;
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
}
餓漢式和懶漢式的區(qū)別:
**
餓漢式是類(lèi)一加載進(jìn)內(nèi)存就創(chuàng)建好了對(duì)象;
懶漢式則是類(lèi)加載進(jìn)內(nèi)存的時(shí)候,對(duì)象還沒(méi)有存在,只有調(diào)用了getInstance()方法時(shí),對(duì)象才開(kāi)始創(chuàng)建。
**
懶漢式是延遲加載,如果多個(gè)線(xiàn)程同時(shí)操作懶漢式時(shí)就有可能出現(xiàn)線(xiàn)程安全問(wèn)題,解決線(xiàn)程安全問(wèn)題
可以加同步來(lái)解決。但是加了同步之后,每一次都要比較鎖,效率就變慢了,
所以可以加雙重判斷來(lái)提高程序效率。
如將上述懶漢式的Instance函數(shù)改成同步:
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s;
}
【多線(xiàn)程的餓漢式和懶漢式】相關(guān)文章:
java多線(xiàn)程的同步和異步09-05
Java多線(xiàn)程的定義狀態(tài)和屬性08-23
《除法豎式》教案07-06
參與式教學(xué)總結(jié)10-12
響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)10-31
什么是響應(yīng)式布局08-19
初中數(shù)學(xué)教案《多項(xiàng)式與多項(xiàng)式相乘》09-26