單例模式(singleton)

2021-09-28 11:49:00 字數 2433 閱讀 6465

/**

* 餓漢式單例

* * 單例的特徵:私有的構造方法 對外提供獲取的方法 在多併發情況下獲取的永遠是同乙個物件

* */

public class hungrysingle

private static hungrysingle single = new hungrysingle();

public static hungrysingle getinstance()

}//建立執行緒類

public class executorthread implements runnable

}/**

*測試

* 懶漢式單例----執行緒非安全

* */

public class lazysingle

private static lazysingle single = null;

/** 執行緒非安全解析:(t1:執行緒1 t2:執行緒2)

* 1:執行緒的執行過程就是搶占cpu時間片的過程。所以執行緒的執行先後順序是不可控的。

* 2:比如 t1 和 t2同時進入到了if的判斷。這兩個此時的single都為null, 所以這兩個執行緒都會new 乙個物件。

* 這就造成了執行緒非安全

*/public static lazysingle getinstance()

return single; }}

public class executorthread implements runnable

}//測試

public class test

}

出現了兩個不同的物件

* synchronized鎖再靜態方法上, 就是對整個class加鎖。

* 當t1進入物件時,t1執行緒的狀態變為running狀態,safelazysingle被上了鎖,

* 此時如果t2也要進入該物件,t2無法進入,只能處於mirror狀態。知道t1執行完,t2才能

* 重新競爭獲得鎖。

* * 缺點:synchronized比較浪費資源 整個物件容易造成死鎖

*/public class safelazysingle

private static safelazysingle single = null;

public static synchronized safelazysingle getinstance()

}public class executorthread implements runnable

}//測試

public class test

}

//優化由於synchronized放於static方法造成死鎖問題。

//雙重檢查鎖

public class doublechecklazysinglebatter

private static doublechecklazysinglebatter single = null;

/* * 分析:當t1 和 t2 同時進入到第乙個if判斷,兩個執行緒同時進入到了該方法。

* 隨後其中乙個執行緒比如就是t1會獲得物件的鎖,t2就會進入到wait狀態。t2直到t1執行完才會重新獲得物件的鎖

* * 但是t2進入後,之前的判斷single還是null的。 但是t1已經建立了乙個例項, 所以再進行if判斷前面的執行緒是否已經

* 建立了物件

*/public static doublechecklazysinglebatter getinstance()

}}

return single; }}

public class executorthread implements runnable

}//測試

public class test

}}

public class innersingle 

public static innersingle getinstance()

static class createsingle

}public class executorthread implements runnable

}//測試

public class test

}}

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...