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

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

線程鎖分類詳解

更新時(shí)間:2020-11-06 17:40:30 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2503次

在Java多線程中,線程鎖的存在是為了解決資源占用的問(wèn)題,保證同一時(shí)間一個(gè)對(duì)象只有一個(gè)線程在訪問(wèn),以此來(lái)保證數(shù)據(jù)的安全性。然而,線程鎖種類繁多,很多時(shí)候我們?nèi)菀谆煜拍睿疚奈覀円黄饋?lái)看看線程鎖分類,詳細(xì)區(qū)分一下線程鎖的種類。

1.公平鎖與非公平鎖

從其它等待中的線程是否按順序獲取鎖的角度劃分。

公平鎖:是指多個(gè)線程在等待同一個(gè)鎖時(shí),必須按照申請(qǐng)鎖的先后順序來(lái)一次獲得鎖。

公平鎖的好處是等待鎖的線程不會(huì)餓死,但是整體效率相對(duì)低一些;非公平鎖的好處是整體效率相對(duì)高一些,但是有些線程可能會(huì)餓死或者說(shuō)很早就在等待鎖,但要等很久才會(huì)獲得鎖。其中的原因是公平鎖是嚴(yán)格按照請(qǐng)求所的順序來(lái)排隊(duì)獲得鎖的,而非公平鎖時(shí)可以搶占的,即如果在某個(gè)時(shí)刻有線程需要獲取鎖,而這個(gè)時(shí)候剛好鎖可用,那么這個(gè)線程會(huì)直接搶占,而這時(shí)阻塞在等待隊(duì)列的線程則不會(huì)被喚醒。

在Java中,公平鎖可以通過(guò) new ReentrantLock (true) 來(lái)實(shí)現(xiàn);非公平鎖可以通過(guò) new ReentrantLock (false) 或者默認(rèn)構(gòu)造函數(shù) new ReentrantLock () 實(shí)現(xiàn)。

2.互斥鎖

從能否有多個(gè)線程持有同一把鎖的角度劃分

互斥鎖的概念非常簡(jiǎn)單,也就是我們常說(shuō)的同步,即一次最多只能有一個(gè)線程持有的鎖,當(dāng)一個(gè)線程持有該鎖的時(shí)候其它線程無(wú)法進(jìn)入上鎖的區(qū)域。在 Java 中 synchronized 就是互斥鎖,從宏觀概念來(lái)講,互斥鎖就是通過(guò)悲觀鎖的理念引出來(lái)的,而非互斥鎖則是通過(guò)樂(lè)觀鎖的概念引申的。

3. 重入鎖(遞歸鎖)與 不可重入鎖(自旋鎖)

從一個(gè)線程能否遞歸獲取自己的鎖的角度劃分

我們知道,一條線程若想進(jìn)入一個(gè)被上鎖的區(qū)域,首先要判斷這個(gè)區(qū)域的鎖是否已經(jīng)被某條線程所持有。如果鎖正在被持有那么線程將等待鎖的釋放,但是這就引發(fā)了一個(gè)問(wèn)題,我們來(lái)看這樣一段簡(jiǎn)單的代碼:

public class ReentrantDemo {
private Lock mLock;
public ReentrantDemo(Lock mLock) {
this.mLock = mLock;
}

public void outer() {
mLock.lock();
inner();
mLock.unlock();
}

public void inner() {
mLock.lock();
// do something
mLock.unlock();
}
}

當(dāng)線程 A 調(diào)用 outer () 方法的時(shí)候,會(huì)進(jìn)入使用傳進(jìn)來(lái) mlock 實(shí)例來(lái)進(jìn)行 mlock.lock () 加鎖,此時(shí) outer () 方法中的這片區(qū)域的鎖 mlock 就被線程 A 持有了,當(dāng)線程 B 想要調(diào)用 outer () 方法時(shí)會(huì)先判斷,發(fā)現(xiàn)這個(gè) mlock 這把鎖被其它線程持有了,因此進(jìn)入等待狀態(tài)。我們現(xiàn)在不考慮線程 B,單說(shuō)線程 A,線程 A 進(jìn)入 outer () 方法后,它還要調(diào)用 inner () 方法,并且 inner () 方法中使用的也是 mlock () 這把鎖,于是接下來(lái)有趣的事情就來(lái)了。按正常步驟來(lái)說(shuō),線程 A 先判斷 mlock 這把鎖是否已經(jīng)被持有了,判斷后發(fā)現(xiàn)這把鎖確實(shí)被持有了,但是可笑的是,是 A 自己持有的。那你說(shuō) A 能否在加了 mlock 鎖的 outer () 方法中調(diào)用加了 mlock 鎖的 inner 方法呢?答案是如果我們使用的是可重入鎖,那么遞歸調(diào)用自己持有的那把鎖的時(shí)候,是允許進(jìn)入的。

可重入鎖:可以再次進(jìn)入方法 A,就是說(shuō)在釋放鎖前此線程可以再次進(jìn)入方法 A(方法 A 遞歸)。

不可重入鎖(自旋鎖):不可以再次進(jìn)入方法 A,也就是說(shuō)獲得鎖進(jìn)入方法 A 是此線程在釋放鎖前唯一的一次進(jìn)入方法 A。

4.悲觀鎖與樂(lè)觀鎖

悲觀鎖是就是悲觀思想,即認(rèn)為讀少寫多,遇到并發(fā)寫的可能性高,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在讀寫數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想讀寫這個(gè)數(shù)據(jù)就會(huì) block 直到拿到鎖。java 中的悲觀鎖就是 Synchronized,AQS 框架下的鎖則是先嘗試 cas 樂(lè)觀鎖去獲取鎖,獲取不到,才會(huì)轉(zhuǎn)換為悲觀鎖,如 RetreenLock。

樂(lè)觀鎖是一種樂(lè)觀思想,即認(rèn)為讀多寫少,遇到并發(fā)寫的可能性低,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù),采取在寫時(shí)先讀出當(dāng)前版本號(hào),然后加鎖操作(比較跟上一次的版本號(hào),如果一樣則更新),如果失敗則要重復(fù)讀 - 比較 - 寫的操作。

5.共享鎖、排它鎖

共享鎖和排它鎖多用于數(shù)據(jù)庫(kù)中的事物操作,主要針對(duì)讀和寫的操作。而在 Java 中,對(duì)這組概念通過(guò) ReentrantReadWriteLock 進(jìn)行了實(shí)現(xiàn),它的理念和數(shù)據(jù)庫(kù)中共享鎖與排它鎖的理念幾乎一致,即一條線程進(jìn)行讀的時(shí)候,允許其他線程進(jìn)入上鎖的區(qū)域中進(jìn)行讀操作;當(dāng)一條線程進(jìn)行寫操作的時(shí)候,不允許其他線程進(jìn)入進(jìn)行任何操作。即讀 + 讀可以存在,讀 + 寫、寫 + 寫均不允許存在

共享鎖:也稱讀鎖或 S 鎖。如果事務(wù) T 對(duì)數(shù)據(jù) A 加上共享鎖后,則其他事務(wù)只能對(duì) A 再加共享鎖,不能加排它鎖。獲準(zhǔn)共享鎖的事務(wù)只能讀數(shù)據(jù),不能修改數(shù)據(jù)。

排它鎖:也稱獨(dú)占鎖、寫鎖或 X 鎖。如果事務(wù) T 對(duì)數(shù)據(jù) A 加上排它鎖后,則其他事務(wù)不能再對(duì) A 加任何類型的鎖。獲得排它鎖的事務(wù)即能讀數(shù)據(jù)又能修改數(shù)據(jù)。

總而言之,線程鎖分類分為這五類,公平鎖與非公平鎖,互斥鎖,重入鎖(遞歸鎖)與不可重入鎖,(自旋鎖)悲觀鎖與樂(lè)觀鎖,共享鎖與排它鎖本文中涉及到的這5類的線程鎖幾乎涵蓋了所有的線程鎖,也對(duì)每個(gè)線程鎖的用法和定義做出了說(shuō)明,摘錄了本站中多線程教程中的部分內(nèi)容,是掌握多線程線程鎖種類的必學(xué)內(nèi)容,為我們后面學(xué)習(xí)多線程的更多內(nèi)容打下堅(jiān)實(shí)的基礎(chǔ)。

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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲综合在线观看一区www | 国产综合精品 | 奇米影视第 | 99九九成人免费视频精品 | 午夜在线视频一区二区三区 | 中文字幕国产视频 | 亚洲一区综合 | 国产精品亚洲二线在线播放 | 日本黄黄| 多多多色麻豆 | 成熟性xxxxx| 日本黄页在线观看 | 国产精品96久久久久久久 | 伊人久色 | 青草九九 | 夜夜爽毛片 | 奇米吧| 91一区二区三区四区五区 | 精品综合久久久久久98 | 377p欧洲最大胆艺术 | 亚洲 欧美 日韩 综合 | 手机看片福利日韩欧美看片 | 国产九色 | 欧美一级毛片无遮 | 性生活视频免费 | 亚洲欧美日韩国产精品 | 综合久久久久6亚洲综合 | 激情综合五月 | 久草在线视频免费播放 | 国产不卡在线观看 | 久青草国产观看在线视频 | 欧美日韩视频一区二区 | 韩国日本三级在线观看 | 久久色成人 | 国产高清精品在线 | 99网| 四虎在线免费 | 真实偷拍激情啪啪对白 | 四虎精品 | 亚洲欧美日韩在线观看你懂的 | 国产一级毛片夜一级毛片 |