【多線程1】:synchronized關鍵字(同步鎖、可重入鎖、非公平鎖)

首先,什麼是鎖,爲什麼要用這個玩意兒?
掌握Java中鎖是Java多線程編程中繞不開的知識,只有知道理解Java各種鎖才能在編碼過程中靈活運用,寫出更高效的多線程程序。而理解掌握鎖的第一步,可從宏觀上對比理解一下各種鎖概念。


synchronized同步鎖:

public class UserInfoService {

	/** 普通代碼 **/
	public String getUserInfo(String id) {
		// TODO
		Sysotem.out.println("--------------普通代碼(無鎖)--------------");
		return null;
	}

	// 同步鎖(鎖方法體)
	public synchronized String getUserInfo(String id) {
		// TODO
		Sysotem.out.println("--------------同步鎖(鎖方法體)--------------");
		return null;
	}

	// 同步鎖(鎖代碼塊)
	public String getUserInfo(String id) {
		synchronized (this) {
			// TODO
			Sysotem.out.println("--------------同步鎖(鎖代碼塊)--------------");
		}
		return null;
	}

}	

synchronized可重入鎖:
可重入鎖又名遞歸鎖,是指在同一個線程在外層方法獲取鎖的時候,在進入內層方法會自動獲取鎖。說的有點抽象,下面會有一個代碼的示例。
對於Java ReentrantLock而言, 他的名字就可以看出是一個可重入鎖,其名字是Re entrant Lock重新進入鎖。
對於Synchronized而言,也是一個可重入鎖。可重入鎖的一個好處是可一定程度避免死鎖。

synchronized void setA() throws Exception{
	Thread.sleep(1000);
	setB();
}

synchronized void setB() throws Exception{
	Thread.sleep(1000);
}

上面的代碼就是一個可重入鎖的一個特點,如果不是可重入鎖的話,setB可能不會被當前線程執行,可能造成死鎖。


























注:以上內容僅提供參考和交流,請勿用於商業用途,如有侵權聯繫本人刪除!


持續更新中…

如有對思路不清晰或有更好的解決思路,歡迎與本人交流,QQ羣:273557553,個人微信:
你遇到的問題是小編創作靈感的來源!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章