黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 Java中的公平鎖和非公平鎖

Java中的公平鎖和非公平鎖

更新時(shí)間:2022-08-16 07:39:26 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1158次

從字面上看,其實(shí)很簡(jiǎn)單。公平意味著每個(gè)人都排隊(duì)買(mǎi)票。不公平是指有人開(kāi)了超級(jí)VIP,跳線。所以在多線程中,有公平鎖和不公平鎖。如何理解?

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

優(yōu)點(diǎn):所有線程都可以獲得資源,不會(huì)在隊(duì)列中餓死。

缺點(diǎn):吞吐量會(huì)下降很多,除了隊(duì)列中的第一個(gè)線程外,其他線程都會(huì)被阻塞,cpu喚醒阻塞線程的開(kāi)銷(xiāo)會(huì)很大。

不公平鎖:多個(gè)線程不按照申請(qǐng)鎖的順序獲取鎖,而是直接嘗試同時(shí)獲取鎖(插入隊(duì)列中)。如果獲取失敗(插入失敗),則進(jìn)入隊(duì)列等待(如果排隊(duì)失敗),如果可以獲取(成功跳轉(zhuǎn)隊(duì)列),則直接獲取鎖。

優(yōu)點(diǎn):可以減少CPU喚醒線程的開(kāi)銷(xiāo),整體吞吐效率會(huì)更高,而且CPU不必喚醒所有線程,會(huì)減少被調(diào)用的線程數(shù)。

缺點(diǎn):可能會(huì)導(dǎo)致隊(duì)列中排隊(duì)的線程無(wú)法獲取鎖或獲取鎖時(shí)間過(guò)長(zhǎng),餓死。

在Java多線程并發(fā)操作中,我們操作鎖大部分時(shí)候都是基于Sync本身實(shí)現(xiàn)的,但是Sync本身是ReentrantLock本身的一個(gè)內(nèi)部類(lèi),而Sync本身繼

從字面上看,其實(shí)很簡(jiǎn)單。公平意味著每個(gè)人都排隊(duì)買(mǎi)票。不公平是指有人開(kāi)了超級(jí)VIP,跳線。所以在多線程中,有公平鎖和不公平鎖。如何理解?

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

優(yōu)點(diǎn):所有線程都可以獲得資源,不會(huì)在隊(duì)列中餓死。

缺點(diǎn):吞吐量會(huì)下降很多,除了隊(duì)列中的第一個(gè)線程外,其他線程都會(huì)被阻塞,cpu喚醒阻塞線程的開(kāi)銷(xiāo)會(huì)很大。

不公平鎖:多個(gè)線程不按照申請(qǐng)鎖的順序獲取鎖,而是直接嘗試同時(shí)獲取鎖(插入隊(duì)列中)。如果獲取失敗(插入失敗),則進(jìn)入隊(duì)列等待(如果排隊(duì)失敗),如果可以獲取(成功跳轉(zhuǎn)隊(duì)列),則直接獲取鎖。

優(yōu)點(diǎn):可以減少CPU喚醒線程的開(kāi)銷(xiāo),整體吞吐效率會(huì)更高,而且CPU不必喚醒所有線程,會(huì)減少被調(diào)用的線程數(shù)。

缺點(diǎn):可能會(huì)導(dǎo)致隊(duì)列中排隊(duì)的線程無(wú)法獲取鎖或獲取鎖時(shí)間過(guò)長(zhǎng),餓死。

在Java多線程并發(fā)操作中,我們操作鎖大部分時(shí)候都是基于Sync本身實(shí)現(xiàn)的,但是Sync本身是ReentrantLock本身的一個(gè)內(nèi)部類(lèi),而Sync本身繼承了AbstractQueuedSynchronizer,如圖:

那么我們?nèi)绾螌?shí)現(xiàn)公平鎖和不公平鎖呢?我們以買(mǎi)票為例,通過(guò) ReentrantLock 進(jìn)行說(shuō)明:

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

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

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

可以看出AB線程是非常有序的,也就是排隊(duì)執(zhí)行!如果大家想了解更多相關(guān)知識(shí),可以關(guān)注動(dòng)力節(jié)點(diǎn)的Java多線程編程,里面有更豐富的知識(shí)等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美在线视频导航 | 国产福利毛片 | 一级毛片成人免费看免费不卡 | 黄色毛片a | 日本中文字幕精品理论在线 | 亚洲香蕉伊在人在线观看9 亚洲香蕉一区二区三区在线观看 | 最色成人网 | 国产片a | 精品欧美 | 成人影视在线观看 | 欧美日韩中 | 91香焦国产线观看看免费 | 午夜寂寞网站 | 亚洲欧美色视频 | 成人亚洲综合 | 亚洲免费成人在线 | 超薄全透明无内肉色丝袜 | 韩国日本三级在线播放 | 精品在线免费观看视频 | 成人午夜小视频 | 日日操夜夜草 | 在线性爱视频 | jizz老师| 日本xx网站| 特级xxxxx欧美 | 综合玖玖 | 福利片在线播放 | 午夜视频入口 | 天天色色网 | 91精品视频免费在线观看 | 深夜福利国产 | 欧美成视频人免费淫片 | 欧美高清视频手机在在线 | 欧美影院一区二区三区 | 亚洲欧美日韩国产精品影院 | 亚洲12色吧 | 国产午夜精品不卡视频 | 亚洲高清在线看 | 亚洲人成网站看在线播放 | 欧美日韩午夜 | 青青青在线视频播放 |