大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java中的公平鎖和非公平鎖

Java中的公平鎖和非公平鎖

更新時間:2022-08-16 07:39:26 來源:動力節點 瀏覽1259次

從字面上看,其實很簡單。公平意味著每個人都排隊買票。不公平是指有人開了超級VIP,跳線。所以在多線程中,有公平鎖和不公平鎖。如何理解?

公平鎖:多個線程按照申請鎖的先后順序獲得鎖,所有線程都在隊列中排隊,保證了隊列中的第一個先拿到鎖。

優點:所有線程都可以獲得資源,不會在隊列中餓死。

缺點:吞吐量會下降很多,除了隊列中的第一個線程外,其他線程都會被阻塞,cpu喚醒阻塞線程的開銷會很大。

不公平鎖:多個線程不按照申請鎖的順序獲取鎖,而是直接嘗試同時獲取鎖(插入隊列中)。如果獲取失敗(插入失敗),則進入隊列等待(如果排隊失敗),如果可以獲取(成功跳轉隊列),則直接獲取鎖。

優點:可以減少CPU喚醒線程的開銷,整體吞吐效率會更高,而且CPU不必喚醒所有線程,會減少被調用的線程數。

缺點:可能會導致隊列中排隊的線程無法獲取鎖或獲取鎖時間過長,餓死。

在Java多線程并發操作中,我們操作鎖大部分時候都是基于Sync本身實現的,但是Sync本身是ReentrantLock本身的一個內部類,而Sync本身繼

從字面上看,其實很簡單。公平意味著每個人都排隊買票。不公平是指有人開了超級VIP,跳線。所以在多線程中,有公平鎖和不公平鎖。如何理解?

公平鎖:多個線程按照申請鎖的先后順序獲得鎖,所有線程都在隊列中排隊,保證了隊列中的第一個先拿到鎖。

優點:所有線程都可以獲得資源,不會在隊列中餓死。

缺點:吞吐量會下降很多,除了隊列中的第一個線程外,其他線程都會被阻塞,cpu喚醒阻塞線程的開銷會很大。

不公平鎖:多個線程不按照申請鎖的順序獲取鎖,而是直接嘗試同時獲取鎖(插入隊列中)。如果獲取失敗(插入失敗),則進入隊列等待(如果排隊失敗),如果可以獲取(成功跳轉隊列),則直接獲取鎖。

優點:可以減少CPU喚醒線程的開銷,整體吞吐效率會更高,而且CPU不必喚醒所有線程,會減少被調用的線程數。

缺點:可能會導致隊列中排隊的線程無法獲取鎖或獲取鎖時間過長,餓死。

在Java多線程并發操作中,我們操作鎖大部分時候都是基于Sync本身實現的,但是Sync本身是ReentrantLock本身的一個內部類,而Sync本身繼承了AbstractQueuedSynchronizer,如圖:

那么我們如何實現公平鎖和不公平鎖呢?我們以買票為例,通過 ReentrantLock 進行說明:

公共類 FairLocked 實現 Runnable {
	私人 int 座位號 = 100;
	/**
	 * 公平鎖實現ReentrantLock在構造方法中設置為true:代表公平鎖
	 *
	 * 設置為false:表示不公平鎖默認也是不公平鎖
	 *
	 */
	/** 私有 ReentrantLock 鎖 = new ReentrantLock(true); */
	/** 私有 ReentrantLock 鎖 = new ReentrantLock(false); */
	私有 ReentrantLock 鎖 = new ReentrantLock();
	@Override
	公共無效運行(){
		而(真){
			嘗試 {
				lock.lock();
				如果(座位號> 0){
					線程.sleep(100);
					- 座位號;
					System.out.println(Thread.currentThread().getName() + "占用1個座位,還有一個座位" + seatNumber + "座位");
				} 別的 {
					System.out.println(Thread.currentThread().getName() + ": 不好意思,票賣完了!");
					休息;
				}
			} 捕捉(InterruptedException e){
				e.printStackTrace();
			} 最后 {

				lock.unlock();
			}
		}
	}
	公共靜態無效主要(字符串[]參數){
		FairLocked rlbr = new FairLocked();
		線程 t1 = new Thread(rlbr, "A window");
		線程 t2 = new Thread(rlbr, "B window");
		t1.start();
		t2.start();
	}
}

需要注意的是,默認情況下是不公平的。如果你想要一個公平的鎖,你必須將它設置為 true。因此,查看上面的輸出,可以看到 A 線程和 B 線程之間存在資源爭用(跳線)。這是一個不公平的鎖。我們設置為true看看效果如何:

可以看出AB線程是非常有序的,也就是排隊執行!如果大家想了解更多相關知識,可以關注動力節點的Java多線程編程,里面有更豐富的知識等著大家去學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 996re免费热在线视频手机 | 欧美日韩中文字幕在线视频 | 奇米四色在线观看 | 免费a级毛片大学生免费观看 | 免费毛片一级 | 日本免费黄色小视频 | 亚洲精品高清国产一线久久97 | 超乳w真性中出し冲田杏梨101 | 中文字幕日韩一区 | 欧美成人性色生活片天天看 | 精品综合久久久久久97超人 | 三级性生活视频 | 国产精品久久免费观看 | 精品乱码一区二区三区在线 | 九九热伊人 | 亚洲精品久久九九热 | 国产精品国偷自产在线 | 欧美日韩理论 | 色老头成人免费视频天天综合 | 国产精品va一区二区三区 | 香蕉免费一区二区三区在线观看 | 国产午夜精品久久久久 | 亚洲色五月 | 久草视频网址 | 秘密影院久久综合亚洲综合 | 亚洲成av人片天堂网 | 日本自己的私人影院 | 中文字幕免费视频 | 天天色色色| 国产成人丝袜精品自啪在线 | 中文字幕国产在线观看 | 久久精品亚洲欧美日韩久久 | 精品在线视频观看 | 久久毛片免费看一区二区三区 | 久久91精品久久久久久水蜜桃 | 成人午夜影院在线观看 | 中文字幕久久网 | 日韩精品一区二区三区毛片 | 国产偷久久 | 亚洲精品国产第一区二区多人 | 九九视频九九 |