博主準備惡補一番Java高併發程式設計相關知識,接下來將閱讀該書,並且進行比較詳細的總結,好記性不如爛筆頭,加油。

Java多執行緒程式設計實戰指南(核心篇)讀書筆記(四),主要記錄該書第七章和第八章的基本概念等知識,後續部分將會持續更新哦~歡迎關注本部落格。



  1. 執行緒活性故障
    1. 死鎖(Deadlock)
      1. 如果多個執行緒因相互等待對方而被永遠暫停(執行緒生命週期狀態為Blocked或者Waiting),則稱之為產生了死鎖.
      2. 死鎖產生的四個必要條件:
        1. 互斥條件:一個資源每次只能被一個執行緒使用
        2. 請求與保持條件:一個執行緒因請求資源而阻塞時,對已獲得的資源保持不放
        3. 不剝奪條件:執行緒已經獲得的資源,在未使用完之前,不能強行剝奪
        4. 迴圈等待條件:若干執行緒之間形成一種頭尾相接的迴圈等待資源關係
      3. 死鎖的避免方法:
        1. 粗鎖法(Coarsen-grained Lock):使用粗粒度的鎖代替多個鎖
        2. 鎖排序法(Lock Ordering):相關執行緒使用全域性統一順序申請鎖
        3. 使用ReentrantLock.tryLock( )搞定
        4. 終極大招:不使用鎖,啊哈哈~~~
      4. 死鎖的恢復:
        1. 定義一個工作者執行緒專門用於死鎖檢測與恢復
        2. 死鎖恢復意義不大
    2. 鎖死(Lockout)
      1. 等待執行緒由於喚醒條件永遠無法成立,導致該執行緒一直處於非執行狀態,稱為這個執行緒鎖死了。
        1. 訊號丟失鎖死
          1. wait方法之前沒有對保護條件進行判斷
        2. 巢狀監視器鎖死
          1. 巢狀鎖導致等待執行緒永遠無法被喚醒的一種活性故障
    3. 執行緒飢餓(Thread Starvation)
      1. 指執行緒一直無法獲取其所需的資源而導致其任務一直無法進展的一種活性故障
    4. 活鎖(LiveLock)
      1. 指執行緒一直處於執行狀態,但是其任務卻一直無法進展的一種活性故障
  2. 執行緒管理
    1. 執行緒組(ThreadGroup)已廢棄
    2. 可靠性:執行緒的未捕獲異常與監控
      1. 介面:UncaughExceptionHandler
      2. 該介面在Thread類內部定義,只定義了一個方法void uncaughtException(Thread t, Throwable e)
    3. 執行緒工廠(ThreadFactory)
      1. 方法public Thread newThread(Runnable r)
    4. 執行緒池
      1. 執行緒的開銷如下:
        1. 執行緒的建立與啟動的開銷
        2. 執行緒的銷燬
        3. 執行緒排程的開銷
        4. 一個系統能夠建立的執行緒總數總是受限於該系統的所擁有的處理器數目
      2. 執行緒池工作原理:
        1. 相關文章