java并發(fā)編程的藝術(shù)讀書(shū)筆記(待續(xù))

第一章 并發(fā)編程的挑戰(zhàn)

  1. 上下文切換

    • 時(shí)間片切換會(huì)導(dǎo)致速度降低
    • 使用Lmbench3可以測(cè)試上下文切換的時(shí)長(zhǎng),使用vmstat可以測(cè)試上下文切換的次數(shù)
    • 減少上下文切換:無(wú)鎖并發(fā)編程、CAS算法(atomic原子類)、使用最少線程和協(xié)程(在單個(gè)線程里,完成多個(gè)任務(wù)的調(diào)度和切換)
  2. 死鎖

    • 避免一個(gè)線程同時(shí)拿多個(gè)鎖或者多個(gè)資源
    • 使用定時(shí)鎖,lock.trylock(timeout)
    • 數(shù)據(jù)庫(kù)鏈接,加鎖和解鎖必須在同一個(gè)鏈接里面,否則會(huì)造成解鎖失敗
  3. 資源限制

    • 受限于硬件資源或者軟件資源,如cpu、帶寬、數(shù)據(jù)庫(kù)連接數(shù)等
    • 分布式處理,使用鏈接池

第二章 java并發(fā)機(jī)制的底層實(shí)現(xiàn)原理

  1. volatile的應(yīng)用
    • java編程語(yǔ)言允許線程訪問(wèn)共享變量,為了確保共享變量能被準(zhǔn)確和一致的更新,線程應(yīng)該通過(guò)排它鎖單獨(dú)獲得這個(gè)變量。

    • cpu術(shù)語(yǔ)
      cpu術(shù)語(yǔ)
    • 編譯成字節(jié)碼,volatile修飾的變量會(huì)多一行LOCK指令。

      1. 將當(dāng)前緩層行的數(shù)據(jù)寫到主內(nèi)存中
      2. 這個(gè)寫回內(nèi)存的操作會(huì)使得其他CPU中緩存了該內(nèi)存地址的數(shù)據(jù)無(wú)效
  1. synchronized的實(shí)現(xiàn)原理
    • 基本使用

      1. 鎖同步方法,鎖是當(dāng)前實(shí)例對(duì)象
      2. 鎖靜態(tài)方法,鎖是當(dāng)前類的Class對(duì)象
      3. 鎖代碼塊,鎖是括號(hào)里面的對(duì)象
    • 實(shí)現(xiàn)原理

      1. jvm基于使用進(jìn)入和退出monitor對(duì)象來(lái)實(shí)現(xiàn)方法同步和代碼塊同步
      2. 鎖代碼塊基于monitorenter和monitorexit指令實(shí)現(xiàn),所方法塊實(shí)現(xiàn)細(xì)節(jié)不同,但也可以基于這兩個(gè)指令
      3. 編譯后,monitorenter插入到代碼塊的開(kāi)始位置,monitorexit插入到結(jié)束位置和異常位置
      4. jvm保證每個(gè)monitorenter有一個(gè)monitorexit與之對(duì)應(yīng)
      5. 任何一個(gè)對(duì)象,都有一個(gè)monitor對(duì)象與之關(guān)聯(lián),當(dāng)且一個(gè)monitor對(duì)象被持有后,它將處于鎖定狀態(tài)
      6. 線程執(zhí)行到monitorenter指令時(shí),會(huì)嘗試獲得對(duì)應(yīng)monitor的所有權(quán),即獲得對(duì)象的鎖
    • 對(duì)象頭

      1. synchronized使用的鎖是存在java對(duì)象頭中。對(duì)象是數(shù)組類型,則使用3個(gè)字寬;其他則使用2個(gè)字寬。在32位虛擬機(jī)中,1個(gè)字寬對(duì)應(yīng)4個(gè)字節(jié),即32bit
        對(duì)象頭長(zhǎng)度
      2. Mark Word 里面默認(rèn)存儲(chǔ)的是對(duì)象的Hashcode,分代年齡,鎖標(biāo)記位;32位JVM默認(rèn)結(jié)構(gòu)如下
        默認(rèn)結(jié)構(gòu)
      3. 運(yùn)行期間,會(huì)因?yàn)殒i標(biāo)記位的變化而變化
        運(yùn)行時(shí)結(jié)構(gòu)變化
      4. 64位虛擬機(jī)下,Mark Word是64bit大小,結(jié)構(gòu)如下
        64位結(jié)構(gòu)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容