鎖相關(guān)知識(shí)小結(jié)

1.共享變量的可見(jiàn)性問(wèn)題

在讀寫(xiě)操作同步進(jìn)行時(shí)践叠,寫(xiě)操作對(duì)共享變量進(jìn)行的改變沒(méi)有應(yīng)用到讀操作言缤,這時(shí)我們稱寫(xiě)操作對(duì)讀操作不可見(jiàn)。

2.什么是原子性

對(duì)于一些系列操作禁灼,要么執(zhí)行完管挟,要么不執(zhí)行,則稱這一系列操作具有原子性

3.什么是CAS

compareAndSet,比較內(nèi)存位置的變量是否是舊的預(yù)期值弄捕,如果是則使用新的值替換僻孝,這是處理器的一個(gè)原子性操作

4.什么是AQS

AQS維護(hù)了一個(gè)state變量類存放狀態(tài)信息,對(duì)于ReenTrantLock,開(kāi)說(shuō)察藐,state表示可以可重入鎖的次數(shù)

5.什么是可重入鎖

在獲取被自己線程占用的鎖時(shí)皮璧,不被阻塞,則是可重入鎖分飞,synchronized是強(qiáng)制性的內(nèi)置鎖悴务,屬于可重入鎖;
可重入鎖的原理: 在鎖內(nèi)部維護(hù)了一個(gè)線程標(biāo)識(shí)和一個(gè)計(jì)數(shù)器譬猫,標(biāo)識(shí)表示當(dāng)前被哪個(gè)線程占用讯檐,如果是當(dāng)前線程,
則獲取到鎖并計(jì)數(shù)器+1染服,當(dāng)釋放鎖后計(jì)數(shù)器-1别洪,當(dāng)計(jì)算器為0時(shí)候,現(xiàn)成標(biāo)示重置為null柳刮,阻塞線程將被喚醒挖垛。

6.Synchronized鎖的缺點(diǎn)

同一時(shí)間只能有一個(gè)線程訪問(wèn)共享變量,無(wú)法實(shí)現(xiàn)同步讀操作

7.ReenTrantReadWriteLock的概念和原理

可以實(shí)現(xiàn)讀寫(xiě)分離秉颗,多個(gè)讀操作可以同時(shí)讀取痢毒,但最多只有一個(gè)寫(xiě)線程存在。
如果已經(jīng)有一個(gè)線程獲取了讀鎖蚕甥,這個(gè)時(shí)候要想獲取寫(xiě)鎖哪替,則需要等待讀鎖釋放;如果已經(jīng)有一個(gè)線程獲取了寫(xiě)鎖菇怀,則
所有獲取讀鎖的線程都要等待寫(xiě)鎖被釋放凭舶。

8.volatile變量

當(dāng)線程寫(xiě)入的時(shí)候會(huì)把寄存器或者其他地方,當(dāng)線程讀取時(shí)會(huì)從主內(nèi)存中獲取最新值爱沟,而非在當(dāng)前線程的私有內(nèi)存或緩存中獲取帅霜。
Java5之后,JVM實(shí)現(xiàn)了在對(duì)volatile的保證:對(duì)volatile域的寫(xiě)入操作happens-before于每一個(gè)后續(xù)的同一個(gè)域的讀寫(xiě)操作呼伸。

9.樂(lè)觀鎖和悲觀鎖义屏、獨(dú)占鎖和共享鎖、公平鎖和非公平鎖

悲觀鎖,使用只能有一個(gè)線程占用闽铐,通常依靠數(shù)據(jù)庫(kù)的鎖機(jī)制蝶怔;樂(lè)觀鎖,只會(huì)數(shù)據(jù)更新的時(shí)候檢測(cè)compareAndSet兄墅。
獨(dú)占鎖踢星,獨(dú)占資源的互斥鎖。共享鎖隙咸,允許同時(shí)有多個(gè)讀線程沐悦,但最多只有一個(gè)寫(xiě)線程,讀和寫(xiě)是互斥的五督。
公平鎖藏否,阻塞的線程在獲取鎖時(shí),采用FIFO先進(jìn)先出的策略充包。非公平鎖副签,在鎖釋放后,多個(gè)線程基矮,根據(jù)線程調(diào)度策略去獲取鎖淆储;
ReenTrantLock是獨(dú)占鎖,也是悲觀鎖家浇。ReadWriteLock是共享鎖本砰,也是悲觀鎖。ReenTrantLcok和ReadWriteLock都提供了公平鎖和非公平鎖的實(shí)現(xiàn)
new ReenTrantLock(true/false) true為公平鎖钢悲,false為非公平鎖点额,不傳參數(shù)默認(rèn)為非公平鎖;
公平鎖比非公平鎖要更消耗資源

10.ConcureentHashMap原理 參考http://www.importnew.com/21781.html

ConcureentHashMap使用分離鎖莺琳,分段segment咖楣,每個(gè)segments繼承了ReenTrantLock,使用了ReenTrantLock的獨(dú)占鎖來(lái)控制同一段只能有一個(gè)線程進(jìn)行寫(xiě)。
而value采用volatile語(yǔ)義芦昔,讀操作直接從主內(nèi)存中獲取,不需要加鎖娃肿。
get方法: 先根據(jù)Hash算法咕缎,算出key的Hash值,根據(jù)Hash值來(lái)確定value存放在哪個(gè)segment中料扰;在當(dāng)前segment中找到對(duì)應(yīng)的entry凭豪,在獲取到后判斷是否是完整
對(duì)象,如果不完整有可能是在獲取的過(guò)程中插入了put了一個(gè)剛好需要get的entry晒杈,但是還沒(méi)有構(gòu)建完成嫂伞,就再用鎖的方式獲取一次,等待寫(xiě)鎖釋放后再讀取。segment
中計(jì)數(shù)entry的count值和entry中的value值都是volatile域的帖努,所以在獲取的時(shí)候都是最新值撰豺。
public V get(Object key) {
int hash = hash(key); // throws NullPointerException if key null
return segmentFor(hash).get(key, hash);
}
V get(Object key, int hash) {
if (count != 0) { // read-volatile // ①
HashEntry<K,V> e = getFirst(hash);
while (e != null) {
if (e.hash == hash && key.equals(e.key)) {
V v = e.value;
if (v != null) // ② 注意這里
return v;
return readValueUnderLock(e); // recheck
}
e = e.next;
}
}
return null;
}
static final class HashEntry<K,V> {
final K key;
final int hash;
volatile V value;
final HashEntry<K,V> next;
。拼余。污桦。
}
put方法和remove方法:采用ReenTranLock獨(dú)占鎖進(jìn)行寫(xiě)操作

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市匙监,隨后出現(xiàn)的幾起案子凡橱,更是在濱河造成了極大的恐慌,老刑警劉巖亭姥,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稼钩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡达罗,警方通過(guò)查閱死者的電腦和手機(jī)坝撑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人映企,你說(shuō)我怎么就攤上這事薄辅。” “怎么了击儡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蝠引。 經(jīng)常有香客問(wèn)我阳谍,道長(zhǎng),這世上最難降的妖魔是什么螃概? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任矫夯,我火速辦了婚禮,結(jié)果婚禮上吊洼,老公的妹妹穿的比我還像新娘训貌。我一直安慰自己,他們只是感情好冒窍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布递沪。 她就那樣靜靜地躺著,像睡著了一般综液。 火紅的嫁衣襯著肌膚如雪款慨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天谬莹,我揣著相機(jī)與錄音檩奠,去河邊找鬼桩了。 笑死,一個(gè)胖子當(dāng)著我的面吹牛埠戳,可吹牛的內(nèi)容都是我干的井誉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乞而,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼送悔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起爪模,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤欠啤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后屋灌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洁段,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年共郭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祠丝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡除嘹,死狀恐怖写半,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尉咕,我是刑警寧澤叠蝇,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站年缎,受9級(jí)特大地震影響悔捶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜单芜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一蜕该、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洲鸠,春花似錦堂淡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至袜匿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稚疹,已是汗流浹背居灯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工祭务, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怪嫌。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓义锥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親岩灭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拌倍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Java8張圖 11、字符串不變性 12噪径、equals()方法柱恤、hashCode()方法的區(qū)別 13、...
    Miley_MOJIE閱讀 3,699評(píng)論 0 11
  • #整理D10# 整理目標(biāo):餐桌 整理時(shí)長(zhǎng):30分鐘 物品整理清單:(共5件) 1.耳機(jī)1副 2.袋子1個(gè) 3.假花3束
    二姐隨行閱讀 101評(píng)論 0 0
  • 你的出現(xiàn) 全在我意料之外 我將這荒謬 通通歸罪于自己的霉運(yùn) 你的亂入 徹底敲碎了所有 美好的預(yù)想 又需發(fā)揮天馬行空...
    予辰同學(xué)閱讀 310評(píng)論 0 1
  • 分析: 1.用圖:圖中表現(xiàn)的是一個(gè)男孩走在人群中找爱,畫(huà)面中的人物大多成雙入對(duì)梗顺; 男孩走在中間,與周圍人物保持著較遠(yuǎn)的...
    Capitalist閱讀 208評(píng)論 0 0
  • 本想用沉默的方式來(lái)說(shuō)再見(jiàn)车摄, 但告別話的早已留到嘴邊寺谤; 本想用一句話來(lái)告別昨天, 但淚水早已連成線吮播; 哽咽变屁,是離別的...
    5664577閱讀 609評(píng)論 1 4