每日一題(五)

問題:

java線程同步實現的方法有哪幾種

分析:

java實現同步主要使用synchronized關鍵字,同時伴隨使用的有wait().sleep().notify().Allnotify()方法

解答:

java同步方式有兩種:同步方法和同步塊。

1.同步方法

給一個方法增加synchronized關鍵字就可以使它成爲同步方法,方法可以是靜態方法和非靜態方法。但是不能是尚未實現的方法(抽象方法與接口方法)。

eg1.

public synchronized void aMethod(){
	//do someting
}
	
public static synchronized void anotherMethod(){
	//do someting
}


2.同步塊

同步塊將同步保護範圍縮小。這樣可以不用對整個方法進行保護,只需要將一個塊作爲臨界區進行保護

eg2.

public  void run(){
	synchronized(this){
		//do something.
	}
}


原理:synchronized的目的是使同一個對象的多個線程進行同步。

每個對象都有一個“鎖標誌”。當這個對象的一個線程訪問某個synchronized的數據時,所有的synchronized數據都會上鎖。因爲“鎖標誌”被當前線程帶走。

如果對靜態方法(包含靜態塊),網上有篇文章是這樣解釋的“那麼線程鎖定的就不是這個類的對象了,也不是這個類自身,而是這個類對應的java.lang.Class類型的對象。同步方法和同步塊之間的相互制約只限於同一個對象之間,所以靜態同步方法只受它所屬類的其它靜態同步方法的制約,而跟這個類的實例(對象)沒有關係。”這裏其實就是指的類對象(用於實例化其他對象)。




發佈了44 篇原創文章 · 獲贊 17 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章