多執行緒學習(5):synchronized 的基礎使用
阿新 • • 發佈:2018-12-13
2018年10月03日
目錄
前言
java中已經有了內建鎖:synchronized,synchronized的特點是使用簡單,一切交給JVM去處理,不需要顯示釋放;
java中,每個物件都有一個物件鎖與之關聯,該鎖表明:任何時候只允許被一個執行緒所擁有,當一個執行緒呼叫物件的一段synchronized程式碼時,需要先獲取這個鎖,然後執行程式碼,執行結束後,釋放鎖。
作為物件鎖,內建鎖,synchronized 有兩種使用方法:synchronized 方法 和 synchronized 塊;此外還可以用於靜態方法、類或某個例項,但是者都將會對程式執行有很大影響。
1)synchronized 方法
方法宣告加入synchronized關鍵字。
public synchronized void mutiThreadAccess(){
//synchronized 方法
//好處:保證這個方法同一時刻只能被一個執行緒訪問,從而保證多執行緒訪問的安全性;
//弊端:當一個方法體的程式碼規模非常大,方法宣告為synchronized 會大大影響程式的執行效率。為了提高程式的效率,java提供了synchronized塊。
}
2)synchronized 塊
靈活性較高,可以指定上鎖的物件。
public void synchronizedBlock(){ synchronized(this){ //synchronized 程式碼塊 //可以將任意程式碼段宣告為synchronized } ConcurrentHashMap syncObject = new ConcurrentHashMap(); synchronized(syncObject){ //synchronized 程式碼塊給物件上鎖 //可以指定上鎖的物件 } }