Android中synchronized關鍵字用法
首先,synchronized是java中表示同步程式碼快的關鍵字,當用來修飾一個方法或者程式碼塊的時候,能保證同一時刻最多隻有一個執行緒在呼叫該方法。
當對程式碼塊加鎖時,synchonized(object)要比直接在方法名前加synchonized關鍵字效率高一些。
呼叫sychonized method()的物件會獲取該物件中所有synchonized的鎖,使得其他執行緒不能訪問所有加了synchonized字首的方法(不僅僅只是當前執行的方法),影響了其他執行緒多其他同步方法的訪問,降低了效率。而用synchonized 修飾程式碼塊 只會對當前程式碼塊加鎖,其他的同步方法不受影響。
下面是一段簡單的例子,供大家參考:
public class SyncDemoTest {
private static StringTAG ="SyncDemoTest";
//等價於方法function2
public synchronized void function1(String b){
Log.e(TAG,"鎖方法 1 "+b);
}
public void function2(String b){
synchronized (this) {
Log.e(TAG,"鎖方法 2 "+b);
}
}
//等價於方法function4
public synchronized static void function3(String b){
Log.e(TAG,"鎖方法 3 "+b);
}
public static void function4(String b) {
synchronized (SyncDemoTest.class) {
Log.e(TAG,"鎖方法 4 "+b);
}
}
}