1. 程式人生 > >多執行緒學習(5):synchronized 的基礎使用

多執行緒學習(5):synchronized 的基礎使用

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 程式碼塊給物件上鎖
			//可以指定上鎖的物件
		}
	}