Synchronized&Lock&AQS
??1.java鎖
??2.Synchronized鎖的使用與原理
?? 對象頭:比如hash碼子漩,對象所屬的年代豫喧,對象鎖,鎖狀態(tài)標志幢泼,偏向鎖(線程) ID 紧显,偏向時間,數(shù)組長度(數(shù)組對象) 等缕棵,?
?? ?? 3.2鎖的粗化:一個append方法就要加一個鎖來保證線程安全食零,因為要做四次添加操作困乒,jvm會優(yōu)化加一個總的鎖。
???4.鎖的升級過程:
??????? (2),線程1和線程2同時訪問同步代碼塊同時會開辟一塊LockRecord空間同時復(fù)制MarkWord過來碉输,然后線程1和線程2同時開始CAS修改籽前,拿到執(zhí)行權(quán)的線程1修改Mark Word中的指針指向地址,升級為輕量級鎖,此時線程1開始執(zhí)行同步體枝哄,線程2來進行第一次修改肄梨,修改失敗進入自旋,如果線程1執(zhí)行完邏輯代碼之后膘格,可能會自旋成功峭范,如果自旋次數(shù)過多失敗的話财松,先會向系統(tǒng)底層Pthread線程調(diào)度庫瘪贱,申請一個互斥量此時又會發(fā)生用戶態(tài)到內(nèi)核態(tài)的轉(zhuǎn)變(這個過程非常耗費資源) ,申請完互斥量后會將Mark Word中的前30位指向不再指向線程1開辟的LockRecord空間辆毡,轉(zhuǎn)而指向我們的重量級鎖依靠底層的互斥量菜秦,之后調(diào)用Pthread庫中的Pthread_mutex_loc將線程阻塞掛起,此時線程1執(zhí)行完之后想要釋放輕量級鎖發(fā)現(xiàn)MarkWord中前30位被修改了舶掖,他會釋放輕量級鎖并且會喚醒阻塞的線程球昨,進行新一輪的鎖競爭。??
??????????? ??5.3 并發(fā)包內(nèi)部基本實現(xiàn)
??????? 這里我們說下Node雏蛮。Node結(jié)點是對每一個等待獲取資源的線程的封裝,其包含了需要同步的線程本身及其等待狀態(tài)阱州,如是否被阻塞挑秉、是否等待喚醒、是否已經(jīng)被取消等苔货。變量waitStatus則表示當(dāng)前Node結(jié)點的等待狀態(tài)犀概,共有5種取值CANCELLED、SIGNAL蒲赂、CONDITION阱冶、PROPAGATE、0滥嘴。
??????? CANCELLED(1):表示當(dāng)前結(jié)點已取消調(diào)度木蹬。當(dāng)timeout或被中斷(響應(yīng)中斷的情況下),會觸發(fā)變更為此狀態(tài),進入該狀態(tài)后的結(jié)點將不會再變化镊叁。
???????? SIGNAL(-1):表示后繼結(jié)點在等待當(dāng)前結(jié)點喚醒尘颓。后繼結(jié)點入隊時,會將前繼結(jié)點的狀態(tài)更新為SIGNAL晦譬。????? ?? ???? CONDITION(-2):表示結(jié)點等待在Condition上疤苹,當(dāng)其他線程調(diào)用了Condition的signal()方法后,CONDITION狀態(tài)的結(jié)點將從等待隊列轉(zhuǎn)移到同步隊列中敛腌,等待獲取同步鎖卧土。
??????? PROPAGATE(-3):共享模式下,前繼結(jié)點不僅會喚醒其后繼結(jié)點像樊,同時也可能會喚醒后繼的后繼結(jié)點尤莺。
???????? 0:新結(jié)點入隊時的默認狀態(tài)。注意生棍,負值表示結(jié)點處于有效等待狀態(tài)颤霎,而正值表示結(jié)點已被取消。所以源碼中很多地方用>0涂滴、<0來判斷結(jié)點的狀態(tài)是否正常友酱。
? ? ? ? ? ? ?? 非公平就是不用進去隊列壮吩,直接跟隊列中的緊接著要訪問同步鎖的線程進行競爭,競爭成功則拿到鎖執(zhí)行邏輯代碼加缘,競爭失敗則到隊列中排隊鸭叙。
?????????????
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來各吨,“玉大人枝笨,你說我怎么就攤上這事。” “怎么了横浑?”我有些...
- 文/不壞的土叔 我叫張陵剔桨,是天一觀的道長。 經(jīng)常有香客問我徙融,道長洒缀,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任欺冀,我火速辦了婚禮树绩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脚猾。我一直安慰自己葱峡,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布龙助。 她就那樣靜靜地躺著,像睡著了一般蛛芥。 火紅的嫁衣襯著肌膚如雪提鸟。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼银酬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筐钟?” 一聲冷哼從身側(cè)響起揩瞪,我...
- 正文 年R本政府宣布,位于F島的核電站偷俭,受9級特大地震影響浪讳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涌萤,卻給世界環(huán)境...
- 文/蒙蒙 一淹遵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧负溪,春花似錦透揣、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崖堤,卻和暖如春侍咱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背密幔。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- Java 提供了兩種鎖機制來控制多個線程對共享資源的互斥訪問弄诲,第一個是 JVM 實現(xiàn)的synchronized,而...
- 本文轉(zhuǎn)載自并發(fā)編程網(wǎng)娇唯,侵刪 本系列文章將整理到我在GitHub上的《Java面試指南》倉庫齐遵,更多精彩內(nèi)容請到我的倉...
- 首先介紹發(fā)展史, synchronized和Lock對比表格在最后面。(其實寫了之后我發(fā)現(xiàn)我需要復(fù)習(xí)JUC了) 1...
- 關(guān)于并發(fā)編程塔插,鎖是不可缺少的一部分梗摇,今天來聊聊鎖,簡單的介紹一些鎖的概念 synchronized的底層實現(xiàn) sy...
- 轉(zhuǎn)載自:https://blog.csdn.net/fly910905/article/details/79765...