圖解Java多線程設計模式 | 如何做好生意 - 2024年7月

圖解Java多線程設計模式

作者:(日)結城浩
出版社:人民郵電
出版日期:2017年08月01日
ISBN:9787115462749
語言:繁體中文

本書通過具體的Java 程序,以淺顯易懂的語言逐一說明了多線程和並發處理中常用的12 種設計模式。內容涉及線程的基礎知識、線程的啟動與終止、線程間的互斥處理與協作、線程的有效應用、線程的數量管理以及性能優化的注意事項等。此外,還介紹了一些多線程編程時容易出現的失誤,以及多線程程序的閱讀技巧等。在講解過程中,不僅以圖配文,理論結合實例,而且提供了運用模式解決具體問題的練習題和答案,幫助讀者加深對多線程和並發處理的理解,並掌握其使用技巧。本書通過具體的Java 程序,以淺顯易懂的語言逐一說明了多線程和並發處理中常用的12 種設計模式。內容涉及線程的基礎知識、線程的啟動與終止、線程間的互斥處理與協作、線程的有效應用、線程的數量管理以及性能優化的注意事項等。此外,還介紹了一些多線程編程時容易出現的失誤,以及多線程程序的閱讀技巧等。在講解過程中,不僅以圖配文,理論結合實例,而且提供了運用模式解決具體問題的練習題和答案,幫助讀者加深對多線程和並發處理的理解,並掌握其使用技巧。結城浩,生於1963年,日本資-深技術作家和程序員。在編程語言、設計模式、數學、加密技術等領域,編寫了很多深受歡迎的入門書。代表作有《數學女孩》系列、《程序員的數學》、《圖解密碼技術》等。

序章1 Java線程 1I1.1 Java線程 2I1.2 何謂線程 2明為跟蹤處理流程,實為跟蹤線程 2單線程程序 3多線程程序 4Thread類的run方法和start方法 5I1.3 線程的啟動 9線程的啟動(1)——利用Thread類的子類 9線程的啟動(2)——利用Runnable接口 10I1.4 線程的暫停 12I1.5 線程的互斥處理 13synchronized方法 14synchronized代碼塊 17I1.6 線程的協作 18等待隊列——線程休息室 19wait方法——將線程放入等待隊列 19notify方法——從等待隊列中取出線程 21notifyAll方法——從等待隊列中取出所有線程 23wait、notify、notifyAll是Object類的方法 24I1.7 線程的狀態遷移 24I1.8 線程相關的其他話題 26I1.9 本章所學知識 26I1.10 練習題 26序章2 多線程程序的評價標准 31I2.1 多線程程序的評價標准 32安全性——不損壞對象 32生存性——必要的處理能夠被執行 32可復用性——類可重復利用 33性能——能快速、大批量地執行處理 33評價標准總結 33I2.2 本章所學知識 34I2.3 練習題 34第1章 Single Threaded Execution模式——能通過這座橋的只有一個人 351.1 Single Threaded Execution模式 361.2 示例程序1:不使用Single Threaded Execution模式的程序 36Main類 37非線程安全的Gate類 37UserThread類 38執行起來看看……出錯了 39為什麼會出錯呢 401.3 示例程序2:使用Single Threaded Execution模式的程序 41線程安全的Gate類 41synchronized的作用 421.4 Single Threaded Execution模式中的登場角色 431.5 拓展思路的要點 44何時使用(可使用Single Threaded Execution模式的情況) 44生存性與死鎖 45可復用性和繼承反常 46臨界區的大小和性能 461.6 相關的設計模式 47Guarded Suspension模式 47Read—Write Lock模式 47Immutable模式 47Thread—Specific Storage模式 481.7 延伸閱讀1:關於synchronized 48synchronized語法與Before/After模式 48synchronized在保護着什麼 49該以什麼單位來保護呢 50使用哪個鎖保護 50原子操作 51long與double的操作不是原子的 511.8 延伸閱讀2:java.util.concurrent包和計數信號量 52計數信號量和Semaphore類 52使用Semaphore類的示例程序 521.9 本章所學知識 551.10 練習題 55第2章 Immutable模式——想破壞也破壞不了 612.1 Immutable模式 622.2 示例程序 62使用Immutable模式的Person類 62Main類 63PrintPersonThread類 632.3 Immutable模式中的登場角色 652.4 拓展思路的要點 66何時使用(可使用Immutable模式的情況) 66考慮成對的mutable類和immutable類(性能) 66為了確保不可變性(可復用性) 67標准類庫中用到的Immutable模式 672.5 相關的設計模式 69Single Threaded Execution模式 69Read—Write Lock模式 69Flyweight模式 692.6 延伸閱讀1:final 69final的含義 692.7 延伸閱讀2:集合類與多線程 71示例1:非線程安全的java.util.ArrayList類 71示例2:利用Collections.synchronizedList方法所進行的同步 74示例3:使用copy—on—write的java.util.concurrent.CopyOnWriteArrayList類 752.8 本章所學知識 762.9 練習題 77第3章 Guarded Suspension模式——等我准備好哦 813.1 Guarded Suspension模式 823.2 示例程序 82Request類 83RequestQueue類 84ClientThread類 85ServerThread類 85Main類 86java.util.Queue與java.util.LinkedList的操作 87getRequest詳解 87putRequest詳解 89synchronized的含義 89wait與鎖 893.3 Guarded Suspension模式中的登場角色 903.4 拓展思路的要點 91附加條件的synchronized 91多線程版本的if 91忘記改變狀態與生存性 91wait與notify/notifyAll的責任(可復用性) 91各種稱呼 91使用java.util.concurrent.LinkedBlockingQueue的示例程序 933.5 相關的設計模式 94Single Threaded Execution模式 94Balking模式 94Producer—Consumer模式 94Future模式 943.6 本章所學知識 953.7 練習題 95第4章 Balking模式——不需要就算了 994.1 Balking模式 1004.2 示例程序 100Data類 100SaverThread類 102ChangerThread類 102Main類 1034.3 Balking模式中的登場角色 1054.4 拓展思路的要點 106何時使用(可使用Balking模式的情況) 106balk結果的表示方式 1074.5 相關的設計模式 107Guarded Suspension模式 107Observer模式 1074.6 延伸閱讀:超時 108Balking模式和Guarded Suspension模式之間 108wait何時終止呢 108guarded timed的實現(使用wait) 109synchronized中沒有超時,也不能中斷 110java.util.concurrent中的超時 1114.7 本章所學知識 1114.8 練習題 112第5章 Producer—Consumer模式——我來做,你來用 1155.1 Producer—Consumer模式 1165.2 示例程序 116Main類 116MakerThread類 117EaterThread類 118Table類 118解讀put方法 120解讀take方法 1215.3 Producer—Consumer模式中的登場角色 1225.4 拓展思路的要點 123守護安全性的Channel角色(可復用性) 123不可以直接傳遞嗎 124Channel角色的剩余空間所導致的問題 124以什麼順序傳遞Data角色呢 125「存在中間角色」的意義 125Consumer角色只有一個時會怎麼樣呢 1265.5 相關的設計模式 126Mediator模式 126Worker Thread模式 126Command模式 126Strategy模式 1275.6 延伸閱讀1:理解InterruptedException異常 127可能會花費時間,但可以取消 127加了throwsInterruptedException的方法 127sleep方法和interrupt方法 128wait方法和interrupt方法 128join方法和interrupt方法 129interrupt方法只是改變中斷狀態 129isInterrupted方法——檢查中斷狀態 130Thread.interrupted方法——檢查並清除中斷狀態 130不可以使用Thread類的stop方法 1305.7 延伸閱讀2:java.util.concurrent包和Producer—Consumer模式 131java.util.concurrent包中的隊列 131使用java.util.concurrent.ArrayBlockingQueue的示例程序 132使用java.util.concurrent.Exchanger類交換緩沖區 1335.8 本章所學知識 1365.9 練習題 137……第6章 Read—Write Lock模式——大家一起讀沒問題,但讀的時候不要寫哦 141第7章 Thread—Per—Message模式——這項工作就交給你了 163第8章 Worker Thread模式——工作沒來就一直等,工作來了就干活 187第9章 Future模式——先給您提貨單 211第10章 Two—Phase Termination模式——先收拾房間再睡覺 231第11章 Thread—Specific Storage模式——一個線程一個儲物櫃 263第12章 Active Object模式——接收異步消息的主動對象 283第13章 總結——多線程編程的模式語言 321附錄


相關書籍