補(bǔ)充一下同步鎖中幾種鎖的升級(jí)過(guò)程:
在對(duì)資源(對(duì)象)進(jìn)行上鎖時(shí),涉及到對(duì)象頭信息的修改,這里簡(jiǎn)單介紹一下對(duì)象頭中關(guān)于鎖的部分——當(dāng)前上鎖的線程id,無(wú)鎖狀態(tài)、偏向鎖標(biāo)記,輕量鎖標(biāo)記,重量鎖標(biāo)記。
當(dāng)一個(gè)線程對(duì)資源進(jìn)行上鎖時(shí),對(duì)象處于無(wú)鎖狀態(tài),這時(shí)通過(guò)cas修改對(duì)象頭,并將當(dāng)前線程id放入對(duì)象頭,這就是偏向鎖,如果一直沒(méi)有線程對(duì)這個(gè)資源競(jìng)爭(zhēng),那么這個(gè)偏向鎖會(huì)一直保持,不會(huì)主動(dòng)釋放,隨后當(dāng)有線程與當(dāng)前線程進(jìn)行資源搶占時(shí),首先查看當(dāng)前線程是否還存活并且持有鎖,如果持有,則撤銷偏向鎖,升級(jí)為輕量級(jí)鎖,如果沒(méi)有,則將對(duì)象頭先調(diào)整為無(wú)鎖狀態(tài),再加偏向鎖。在輕量級(jí)鎖的情況下,有線程還是在與當(dāng)前持有鎖的線程進(jìn)行搶占資源并且不斷自旋,當(dāng)自旋達(dá)到一定次數(shù)的時(shí)候,輕量級(jí)鎖便會(huì)升級(jí)成重量鎖,并且將所有搶占該資源且沒(méi)有獲得鎖的線程全部放入等待隊(duì)列。
高并發(fā)多線程總結(jié)1.多線程基本概念 首先,我們要理解多線程編程,必須清楚幾個(gè)基本概念:進(jìn)程——進(jìn)程是操作系統(tǒng)層面的概念,它是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位線程——線程是進(jìn)程內(nèi)部的程序流...