對於那些比較耗記憶體的類,只例項化一次可以大大提高效能,尤其是在移動開發中。
保持程式執行的時候該中始終只有乙個例項存在記憶體中。
例項唯一性
自行建立
全域性訪問
public class singleton
public static singleton getinstance()}}
return singleton;
}}
必須防止外部可以呼叫建構函式進行例項化,因此建構函式必須私有化。
必須定義乙個靜態函式獲得該單例
單例使用volatile修飾
使用synchronized進行同步處理,並且雙重判斷是否為null,我肯看到synchronized(singleton.class)裡面又進行了是否為null的判斷,這是因為乙個執行緒進入了該**,如果另乙個執行緒在等待,這時候前乙個執行緒建立了乙個例項出來完畢後,另乙個執行緒獲得鎖進入該同步**,例項已經存在,沒必要再次建立,因此這個判斷是否為null是必須的
由於多執行緒的情況,系統會根據**自動呼叫「指令重排」機制,但是正是由於這個機制,導致了普通的雙端檢鎖不能很好的達到執行緒安全的效果,所以此時需要利用volatile的特性。
核心就是利用volatile關鍵字防止「指令重排」,再利用雙端檢鎖來達到執行緒安全。
1.比如android-universal-image-loader中的單例
private
volatile
static imageloader instance;
/** returns singleton class instance */
public
static imageloader getinstance()
}}return instance;
}
2.eventbus中的單例
private
static
volatile eventbus defaultinstance;
public
static eventbus getdefault()
}}return defaultinstance;
}
3.管理activity單例
public
class
activitymanager
public
static activitymanager getinstance()
}return instance;
}public
void
addacticity
(activity act)
public
void
removeactivity
(activity act)
public
void
killmyprocess()
mactivitystack.
clear()
; android.os.process.
killprocess
(android.os.process.
mypid()
);}}
推薦鏈結單例模式 設計模式之單例模式
前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...
設計模式之單例模式
package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...
設計模式之 單例模式
單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...