并發(fā)

線程安全

在多線程條件下,共享狀態(tài)能夠保持正確性。

Synchronized

  • 反編譯的時候寥枝,加入了monitorenter和monitorexit指令,實現(xiàn)了同步的語義磁奖。
  • monitor是同步的基本組成單元。以前是依靠操作系統(tǒng)的內(nèi)部鎖某筐,在用戶態(tài)和核心態(tài)中轉(zhuǎn)化比搭,是一個重量級的操作。
  • 現(xiàn)在的JDK對Monitor做了很多的改進南誊,進行了三種實現(xiàn):
    1. 沒有競爭時身诺,默認使用偏斜鎖。JVM會利用CAS操作抄囚,在對象頭里的mark word字段里寫入這個線程的ID霉赡,表示對象偏向于這個線程。并不涉及真正的互斥鎖幔托。
    2. 如果有其他的線程試圖獲取某個已經(jīng)被偏斜過的對象穴亏,JVM需要撤消偏斜鎖蜂挪,并切換到輕量級的鎖實現(xiàn)。同樣利用CAS更改mark word來試圖獲取鎖嗓化。

ReentrantLock

  • 一個線程獲取它已經(jīng)獲取的鎖時棠涮,能夠自動成功。這是一個對鎖粒度的概念刺覆,鎖的持有是以線程為單位而不是調(diào)用的次數(shù)严肪。
  • 比前者更有定制性,可以響應(yīng)中斷請求谦屑,可以進行超時的鎖獲取驳糯。
  • 并發(fā)包里的Condition條件變量,將對線程的wait氢橙,notify操作轉(zhuǎn)化為對對象的操作酝枢,將同步操作轉(zhuǎn)化為對象行為。
    ArrayBlockQueue

在使用ReentrantLock類的時充蓝,一定要注意三點:
在finally中釋放鎖隧枫,目的是保證在獲取鎖之后,最終能夠被釋放
不要將獲取鎖的過程寫在try塊內(nèi)谓苟,因為如果在獲取鎖時發(fā)生了異常官脓,異常拋出的同時,也會導(dǎo)致鎖無故被釋放涝焙。
ReentrantLock提供了一個newCondition的方法卑笨,以便用戶在同一鎖的情況下可以根據(jù)不同的情況執(zhí)行等待或喚醒的動作。


f5753a4695fd771f8178120858086811.png

死鎖

所以仑撞,從程序設(shè)計的角度反思赤兴,如果我們賦予一段程序太多的職責,出現(xiàn)“既要…又要…”的情況時隧哮,可能就需要我們審視下設(shè)計思路或目的是否合理了桶良。對于類庫,因為其基礎(chǔ)沮翔、共享的定位陨帆,比應(yīng)用開發(fā)往往更加令人苦惱,需要仔細斟酌之間的平衡采蚀。

  1. 如果可能的話疲牵,盡量避免使用多個鎖,并且只有需要時才持有鎖榆鼠。否則纲爸,即使是非常精通并發(fā)編程的工程師,也難免會掉進坑里妆够,嵌套的 synchronized 或者 lock 非常容易出問題识啦。
  2. 如果必須使用多個鎖负蚊,盡量設(shè)計好鎖的獲取順序,這個說起來簡單袁滥,做起來可不容易盖桥,你可以參看著名的銀行家算法
  3. 使用帶超時的方法,為程序帶來更多可控性题翻。
  4. 靜態(tài)代碼分析
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揩徊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嵌赠,更是在濱河造成了極大的恐慌塑荒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜挺,死亡現(xiàn)場離奇詭異齿税,居然都是意外死亡,警方通過查閱死者的電腦和手機炊豪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門凌箕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人词渤,你說我怎么就攤上這事牵舱。” “怎么了缺虐?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵芜壁,是天一觀的道長。 經(jīng)常有香客問我高氮,道長慧妄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任剪芍,我火速辦了婚禮塞淹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罪裹。我一直安慰自己窖铡,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布坊谁。 她就那樣靜靜地躺著,像睡著了一般滑臊。 火紅的嫁衣襯著肌膚如雪口芍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天雇卷,我揣著相機與錄音鬓椭,去河邊找鬼颠猴。 笑死,一個胖子當著我的面吹牛小染,可吹牛的內(nèi)容都是我干的翘瓮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裤翩,長吁一口氣:“原來是場噩夢啊……” “哼资盅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踊赠,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呵扛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筐带,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體今穿,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年伦籍,在試婚紗的時候發(fā)現(xiàn)自己被綠了蓝晒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡帖鸦,死狀恐怖芝薇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情富蓄,我是刑警寧澤剩燥,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站立倍,受9級特大地震影響灭红,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜口注,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一变擒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寝志,春花似錦娇斑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乐导,卻和暖如春苦丁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背物臂。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工旺拉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留产上,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓蛾狗,卻偏偏與公主長得像晋涣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沉桌,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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