主要有兩種用法:synchronized方法和synchronized代碼塊
對於synchronized方法,有如下作用:
public synchronized void syncCounter(int newVal){
System.out.println("synchronized方法...");
}
確保了同一時刻對於每一個類實例,其所有聲明爲 synchronized 的成員函數中至多隻有一個synchronized方法處於可執行狀態(因爲至多隻有一個能夠獲得該類實例對應的鎖),從而有效避免了類成員變量的訪問衝突(只要所有可能訪問類成員變量的方法均被聲明爲 synchronized)。
對於synchronized代碼塊:
synchronized 塊是這樣一個代碼塊,其中的代碼必須獲得對象 syncObject (如前所述,可以是類實例或類,eg. this)的鎖方能執行,具體機制同前所述。由於可以針對任意代碼塊,且可任意指定上鎖的對象,故靈活性較高。
int i=100,userId=2;
String userName="SyncMM";
public void methodName(){
synchronized(this){
i++;
System.out.println("Synchronized param i:"+i);
}
System.out.println("userName:"+userName);
}