1. 程式人生 > >Java多執行緒程式設計實戰指南(核心篇)讀書筆記(四)

Java多執行緒程式設計實戰指南(核心篇)讀書筆記(四)

博主準備惡補一番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. 相關推薦

          【新聞】本人新書《Java執行程式設計實戰指南核心》已出版上市

          豆瓣主頁 購買連結 試讀下載 (待補充) 原始碼下載 內容簡介 隨著現代處理器的生產工藝從提升處理器主頻頻率轉向多核化,即在一塊晶片上整合多個處理器核心(Core),多核處理器(Multicore Proc

          Java執行程式設計實戰指南核心讀書筆記

          博主準備惡補一番Java高併發程式設計相關知識,接下來將閱讀該書,並且進行比較詳細的總結,好記性不如爛筆頭,加油。Java多執行緒程式設計實戰指南(核心篇)讀書筆記(四),主要記錄該書第七章和第八章的基

          Java執行程式設計實戰》——第5章 Two-phase Termination兩階段終止模式

          Two-phase Termination模式通過將停止執行緒分解為準備階段和執行階段兩個階段,提供了一種通用的優雅停止執行緒的方法。 準備階段:通知目標執行緒準備進行停止。 設定標誌變數。 呼叫目標執行緒的interrupt方法。 對於能夠對interrupt方法呼

          Java執行程式設計實戰》—— 第10章 Thread Specific Storage執行特有儲存模式

          Thread Specific Storage模式:不共享變數,不使用鎖。 不同執行緒使用統一的訪問接入點可以獲取執行緒特有的例項。 弊端: 隱藏了系統結構,隱藏了應用中各個物件之間的關係,從而使應用更加難於理解。 鼓勵使用全域性物件。 常見使用場景

          JAVA執行程式設計實戰指南》之Two-phase Termination(兩階段終止)模式

          本文是《JAVA多執行緒程式設計實戰指南》的樣章,感謝作者授權併發網(ifeve.com)發表此文。感謝demochen整理此文。 5.1Two-phase Termination模式簡介 停止執行緒是一個目標簡單而實現卻不那麼簡單的任務。首先,Java沒有提供直接的API用於停止執行緒。此

          Java執行程式設計實戰》—— 第9章 Thread Pool執行模式

          一個系統中的執行緒相對於其所要處理的任務而言,是一種非常有限的資源。執行緒不僅在執行任務時需要消耗CPU時間和記憶體等資源,執行緒物件(Thread例項)本身以及執行緒所需的呼叫棧(Call Stack)也佔用記憶體,並且Java中建立一個執行緒往往意味著JVM會建立相應的依賴於宿主機作業系

          Java執行程式設計實戰》—— 第8章 Active Object主動物件模式

          Active Object模式是一種非同步程式設計模式。(跟Promise模式有什麼區別呢?) 通過對方法的呼叫與方法的執行進行解耦來提高併發性。 類圖 當Active Object模式對外暴露的非同步方法被呼叫時,與該方法呼叫相關的上下文資訊,包括被呼叫的非同步方法名、引數等,會被

          Java執行程式設計實戰》——第七章Producer-Consumer生產者/消費者模式

          Producer-Consumer模式的核心是通過通道對資料(或任務)的生產者和消費者進行解耦,從而使二者的處理速率相對來說互不影響。 類圖 BlockingQueueChannel: 當佇列滿時,將當前執行緒掛起直到佇列非滿 當佇列為空時,將當前執行緒掛起直到佇列

          Java執行程式設計實戰》——第6章 Promise承諾模式

          Promise模式是一種非同步程式設計模式。 開始一個任務的執行,並得到一個用於獲取該任務執行結果的憑據物件,而不必等待該任務執行完畢就可以繼續執行其他操作。 等到需要該任務的執行結果時,再呼叫憑據物件的相關方法來獲取。 類圖 獲取執行結果時,可能由於非同步任務尚未執行完畢而阻塞。

          Java執行程式設計實戰》——第4章 Guarded Suspension保護性暫掛模式

          一個執行緒等待另一個執行緒完成一定的操作,才能繼續執行。 核心思想是如果某個執行緒執行特定的操作前需要滿足一定的條件,則在該條件未滿足時將該執行緒暫停執行(waiting)。 類圖 如果頻繁出現保護方法被呼叫時保護條件不成立,那麼保護方法的執行執行緒就會頻繁地被暫掛和喚醒,而導致頻繁

          Java執行程式設計實戰》——第3章 Immutable Object不可變物件模式

          通過使用對外可見的狀態不可變的物件,無需額外的同步訪問控制。既保證了資料一致性,又避免了同步訪問控制所產生的額外開銷和問題,也簡化了程式設計。 狀態不可變的物件:物件一經建立,其對外可見的狀態就保持不變,如String和Integer。 Immutable Object模式:將現實世界中狀態

          JAVA執行程式設計實戰視訊-第三階段共80節

                          高併發程式設計第三階段01講 AtomicInteger多執行緒下測試講解                 高併發程式設計第三階段02講 AtomicInteger API詳解,以及CAS演算法詳細介紹                 高併發

          Java執行程式設計實戰》——第2章 設計模式及其作用

          設計模式與三十六計 多執行緒設計模式簡介 不使用鎖的情況下保證執行緒安全 Immutable Object(不可變物件)模式 Thread Specific Storage(執行緒特有儲存)模式 Serial Thread Confinement(序列執行緒封

          Java執行程式設計實戰》——第1章 Java執行程式設計實戰基礎

          Java執行緒: 守護執行緒——不影響JVM的正常停止,常用於執行一些重要性不太高的任務 使用者執行緒—— 建立一個Thread例項與建立其他類例項的區別: JVM為Thread例項分配兩個呼叫棧所需的儲存空間: 跟蹤Java程式碼間的呼叫關係

          Java執行程式設計實戰》—— 第11~14章

          第11章 Serial Thread Confinement(序列執行緒封閉)模式 將多個併發的任務存入佇列實現任務的序列化。唯一的工作者執行緒。 避免加鎖。本質是使用一個開銷更小的鎖替換一個可能的開銷更大的鎖。 第12章 Master-Slave(主僕)模式 將一個任務分解為若

          Java執行程式設計實戰

          Java執行緒: 守護執行緒——不影響JVM的正常停止,常用於執行一些重要性不太高的任務 使用者執行緒—— 建立一個Thread例項與建立其他類例項的區別: JVM為Thread例項分配兩個呼叫棧所需的儲存空間,一個呼叫棧跟蹤Java程式碼間的呼叫關係,另一個用

          Java執行程式設計模式實戰指南:Two-phase Termination模式

           本文由本人首次釋出在infoq中文站上:http://www.infoq.com/cn/articles/java-multithreaded-programming-mode-two-phase-termination 停止執行緒是一個目標簡單而實現卻不那麼簡單的

          Java執行程式設計模式實戰指南:Two-phase Termination模式

          文章來源: 文章程式碼地址: 停止執行緒是一個目標簡單而實現卻不那麼簡單的任務。首先,Java沒有提供直接的API用於停止執行緒。此外,停止執行緒時還有一些額外的細節需要考慮,如待停止的執行緒處於阻塞(等待鎖)或者等待狀態(等待其它執行緒)、尚有未處

          Java執行程式設計學習總結

            (尊重勞動成果,轉載請註明出處:https://blog.csdn.net/qq_25827845/article/details/84894463冷血之心的部落格) 系列文章: Java多執行緒程式設計學習總結(一) Java多執行緒程式設計學習總結(二) 前

          Java執行程式設計-1-執行安全和鎖Synchronized概念

          一、程序與執行緒的概念 (1)在傳統的作業系統中,程式並不能獨立執行,作為資源分配和獨立執行的基本單位都是程序。 在未配置 OS 的系統中,程式的執行方式