天天看點

單例模式

第二鐘單例模式當系統壓力增大,并發量增加時則可能在記憶體中出項多個執行個體,破壞了最初的預期。出現這種情況是因為如果一個線程a執行到

singleton=new singleton(),但是還沒有獲得對象(對象初始化是需要使時間的),第二個線程b也在執行,執行到(single==null)

判斷,那麼線程b獲得判斷的條件為真,于是繼續運作下去,在記憶體中就會出現兩個對象。

其次,在考慮到對象的複制情況下。在java中,對象預設是不可以被複制的,若實作了cloneable接口,并實作了clone方法,則可以直接通過

對象複制方式建立一個新的對象,對象複制是不用調用類的構造函數,是以即使是私有的構造函數,對象仍然可以被複制。在一般情況下,類

複制的情況不需要考慮,很少會出現一個單例類會主動要求被被複制的情況,解決該問題的最好方法就是單例類不要實作cloneable接口。

繼續閱讀