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

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

線程鎖分類詳解

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

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

1.公平鎖與非公平鎖

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

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

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

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

2.互斥鎖

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

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

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

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

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

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)來 mlock 實(shí)例來進(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,單說線程 A,線程 A 進(jìn)入 outer () 方法后,它還要調(diào)用 inner () 方法,并且 inner () 方法中使用的也是 mlock () 這把鎖,于是接下來有趣的事情就來了。按正常步驟來說,線程 A 先判斷 mlock 這把鎖是否已經(jīng)被持有了,判斷后發(fā)現(xiàn)這把鎖確實(shí)被持有了,但是可笑的是,是 A 自己持有的。那你說 A 能否在加了 mlock 鎖的 outer () 方法中調(diào)用加了 mlock 鎖的 inner 方法呢?答案是如果我們使用的是可重入鎖,那么遞歸調(diào)用自己持有的那把鎖的時(shí)候,是允許進(jìn)入的。

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

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

4.悲觀鎖與樂觀鎖

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

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

5.共享鎖、排它鎖

共享鎖和排它鎖多用于數(shù)據(jù)庫中的事物操作,主要針對(duì)讀和寫的操作。而在 Java 中,對(duì)這組概念通過 ReentrantReadWriteLock 進(jìn)行了實(shí)現(xiàn),它的理念和數(shù)據(jù)庫中共享鎖與排它鎖的理念幾乎一致,即一條線程進(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ù)。

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

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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 免费国产不卡午夜福在线观看 | 亚洲成a人片 | 成人窝窝午夜看片 | 久久精品一级 | 免费操片| 日韩大片免费观看视频播放 | 日本免费中文字幕 | 婷婷色婷婷 | 狠狠躁夜夜躁人人爽天天天天 | 亚洲国产精久久小蝌蚪 | 小明免费视频一区二区 | 久久精品国产日本波多麻结衣 | 99re这里有免费视频精品 | 福利影院在线观看 | 直接看的黄色网址 | 一二三四在线视频社区8 | 亚洲激情在线 | 亚洲欧美在线中文字幕不卡 | 美女视频黄的免费视频网页 | 国产成人免费视频 | 激情综合网五月激情 | 国产精品视频ccav | 国产欧美日韩精品综合 | 手机国产日韩高清免费看片 | 欧美精品第三页 | 日本一本久 | 午夜琪琪 | 国产欧美日韩在线不卡第一页 | 日韩精品视频福利资源站 | 99爱视频99爱在线观看免费 | 国产精品suv一区二区 | 国产一区二区三区在线免费 | 福利在线视频观看 | 殴美在线 | 日日操狠狠操 | 最近最新免费中文字幕高清 | 黄色视屏在线免费观看 | 亚洲狼人香蕉香蕉在线28 | 欧美日产国产亚洲综合图区一 | 色片免费在线观看 | 国产精品一二三区 |