android單例模式的使用

2021-07-27 17:38:21 字數 1043 閱讀 4404

android中通常會用到單例模式的場景.

含義:確保某類有且只有乙個物件.

單例模式的寫法有幾種,常見的有」懶漢式「和"餓漢式",但是這兩種方式有一定的隱患,下面介紹另外兩種方式,僅供參考:

第一種:

public class singleton

// 提供乙個全域性的靜態方法

public static singleton getinstance() }}

return foo;

}}這種寫法既解決了」懶漢式「的多執行緒問題,又解決了"餓漢式"的資源浪費的現象.

標識(1) 對sinstance判斷null的原因: sinstance = new singleton()看起來是一行**,但實際上它並不是乙個原子操作,這句**最終會編譯成多條彙編指令,它大致做了3件事情:

1.給singleton的例項分配記憶體

2.呼叫 singleton()的建構函式,初始化成員字段

3.將sinstance物件指向分配的記憶體空間(此時sinstance就不是null了)

第二種:

第一種方式雖然在一定程度上解決了資源消耗,多餘的同步,執行緒安全的問題,但是它還是在某些情況下出現失效的問題,這個問題被稱為雙重檢查鎖定(dcl)失效,所以在併發程式設計中指出

這種"優化"是醜陋的,不贊成使用,建議使用如下**替代.

public class singleton

public static singleton getinstance()

//靜態內部類

public static class singletonholder

}此種方式的好處:當第一次載入singleton類是並不會初始化sinstance,只有在第一次呼叫singleton的getinstance()方法時才會導致sinstance被初始化.因此第一次呼叫getinstance()方法會

導致虛擬機器載入singletonholder類,這種方式不僅能夠保證執行緒安全,也能夠保證單例物件的唯一性,同時也延遲了單例物件的例項化,推薦使用這種單例模式實現方法.

Android單例模式

單例模式singleton 應用場合 有些物件只需要乙個就足夠了,如古代皇帝 老婆 作用 保證整個應用程式中某個例項有且只有乙個 型別 餓漢模式 懶漢模式 public class singleton 2.建立類的唯一例項,使用private static修飾 private static sing...

Android單例模式

參考部落格 1 懶漢模式 每一次呼叫都要對方法進行加鎖,要維護鎖會導致效能損耗,其實不需要每次進入方法都加鎖,只需要第一次進入的時候防止多個執行緒產生多個單例即可。所以只需要在new singleton處加鎖即可,由此引出第二種模式,雙重鎖定模式。2 雙重鎖定模式 第一次生成完例項以後就直接返回例項...

Android 設計模式 單例模式

有哪些單例模式 實現方式1 雙重確認 double check lock dcl class singleton public void dosomething public static singleton getinstance return sinstande 為了減少重複 可用泛型來優化 抽...