Java多線程與線程池技術詳解( 簡體 字) | |
作者:肖海鵬 牟東旭 | 類別:1. -> 程式設計 -> JAVA -> Java |
出版社:清華大學出版社 | 3dWoo書號: 54556 詢問書籍請說出此書號! 有庫存 NT售價: 395 元 |
出版日:5/1/2021 | |
頁數:313 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787302573739 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章多線程基礎 1
1.1進程與線程 1 1.1.1操作系統與進程 1 1.1.2線程與進程的關系 2 1.2多線程啟動 3 1.2.1線程標識 5 1.2.2Thread與Runnable 6 1.2.3run()與start() 7 1.2.4Thread源碼分析 9 1.3線程狀態 11 1.3.1NEW狀態 11 1.3.2RUNNABLE狀態 12 1.3.3BLOCKED狀態 13 1.3.4WAITING狀態 14 1.3.5TIMED_WAITING狀態 19 1.3.6WAITING與BLOCKED的區別 21 1.3.7TERMINATED狀態 21 1.3.8線程狀態轉換 22 1.4sleep()與yield() 22 1.4.1線程休眠sleep() 22 1.4.2線程讓步yield() 24 1.5線程優先級 25 1.5.1線程優先級與資源競爭 26 1.5.2案例:大型浮點運算測試 26 1.5.3案例:多線程售票 28 1.6守護線程 30 1.6.1守護線程的概念 30 1.6.2案例:清道夫與工作者 31 1.7本章習題 34 第2章線程安全與共享資源競爭 37 2.1synchronized同步介紹 37 2.2synchronized同步方法 38 2.2.1同步方法調用流程 41 2.2.2同步方法之間的互斥 41 2.2.3同步方法與非同步方法 44 2.3synchronized同步靜態方法 46 2.3.1單例高并發問題 46 2.3.2類鎖與對象鎖 47 2.3.3靜態同步方法之間互斥 47 2.3.4靜態同步方法與靜態非同步方法 49 2.4synchronized同步代碼塊 50 2.4.1鎖當前對象 50 2.4.2鎖其他對象 51 2.4.3鎖Class 51 2.5項目案例:火車售票 52 2.5.1共享任務模式 52 2.5.2多任務模式 55 2.5.3共享車票資源 56 2.6項目案例:家庭消費 59 2.7項目案例:別墅Party 63 2.7.1無鎖模式 63 2.7.2單鎖模式 66 2.7.3雙鎖模式 67 2.8JDK常見類的線程安全性 69 2.8.1集合ArrayList與Vector 69 2.8.2StringBuffer與StringBuilder 71 2.8.3HashMap與ConcurrentHashMap 72 2.9本章習題 73 第3章多線程通信 76 3.1wait()與notify() 76 3.1.1阻塞當前線程 76 3.1.2案例分析:廚師與侍者1 78 3.1.3案例分析:廚師與侍者2 81 3.1.4案例分析:兩個線程交替輸出信息 85 3.2join線程排隊 87 3.2.1加入者與休眠者 87 3.2.2案例:緊急任務處理 89 3.2.3join限時阻塞 91 3.3線程中斷 93 3.3.1中斷運行態線程 93 3.3.2中斷阻塞態線程 95 3.3.3如何停止線程 97 3.4CountDownLatch計數器 98 3.5CyclicBarrier屏障 100 3.5.1案例:矩陣分行處理 101 3.5.2案例:賽馬游戲 103 3.6Exchanger 104 3.7Semaphore信號燈 107 3.8死鎖 108 3.8.1案例:銀行轉賬引發死鎖 109 3.8.2案例:哲學家就餐死鎖 112 3.9本章習題 115 第4章線程池入門 117 4.1ThreadPoolExecutor 117 4.1.1創建線程池 118 4.1.2關閉線程池 121 4.2Executor接口 123 4.3ExecutorService接口 124 4.3.1Callable返回任務執行結果 125 4.3.2shutdown與shutdownNow 127 4.4Executors工具箱 127 4.4.1newCachedThreadPool 128 4.4.2newFixedThreadPool 133 4.4.3newSingleThreadExecutor 137 4.4.4newScheduledThreadPool 141 4.4.5newWorkStealingPool 143 4.5線程工廠與線程組 151 4.5.1線程組 151 4.5.2線程與線程組 152 4.5.3線程工廠接口 155 4.5.4默認線程工廠實現 156 4.5.5線程池與線程工廠 157 4.6線程池異常處理 158 4.6.1異常捕獲 158 4.6.2UncaughtExceptionHandler處理異常 158 4.6.3Future處理異常 161 4.7本章習題 163 第5章線程池與鎖 165 5.1重入鎖ReentrantLock 165 5.1.1重入鎖 166 5.1.2互斥鎖 167 5.1.3ReentrantLock與synchronized 169 5.1.4嘗試加鎖并限時等待 171 5.2重入鎖與Condition 173 5.2.1案例分析:廚師與侍者 176 5.2.2案例分析:緩沖區隊列 178 5.3讀鎖與寫鎖 181 5.3.1案例:并發讀寫集合 182 5.3.2案例:Map并發控制 193 5.3.3數據庫事務與鎖 197 5.4公平鎖與非公平鎖 198 5.5本章習題 201 第6章線程池與阻塞隊列 202 6.1Queue接口 202 6.2BlockingQueue接口 202 6.3BlockingQueue實現類 203 6.4LinkedBlockingQueue與ArrayBlockingQueue 203 6.4.1阻塞隊列的單鎖與雙鎖 204 6.4.2ArrayBlockingQueue并發分析 205 6.4.3LinkedBlockingQueue并發分析 206 6.4.4案例:12306搶票 208 6.5生產者與消費者模式 210 6.5.1基于管道發送與接收消息 211 6.5.2基于阻塞隊列發送與接收消息 213 6.5.3案例:醫院掛號 213 6.6SynchronousQueue 217 6.6.1同步隊列應用場景 217 6.6.2案例:Web服務器處理并發請求 218 6.7延遲阻塞隊列 220 6.7.1案例:元素延遲出隊 221 6.7.2項目案例:Web服務器會話管理 222 6.8PriorityBlockingQueue 226 案例:按優先級執行任務 226 6.9LinkedTransferQueue 228 6.10LinkedBlockingDeque 229 6.11本章習題 229 第7章線程池與AQS 231 7.1acquire與release 231 7.2性能目標 232 7.3設計與實現 233 7.3.1同步狀態 233 7.3.2阻塞 244 7.3.3排隊 246 7.3.4條件隊列 248 7.4使用AQS 249 7.4.1控制公平性 250 7.4.2同步器 251 7.5AQS性能 252 7.5.1過載 253 7.5.2吞吐量 254 7.6本章習題 255 第8章結束線程與線程池任務 257 8.1stop()與destroy() 257 8.2狀態值結束線程 258 8.3shutdown()與shutdownNow() 258 8.4線程休眠 258 8.5線程中斷 258 8.6Future與FutureTask 258 8.6.1取消任務 259 8.6.2任務超時結束 263 8.7項目案例:所有線程池任務暫停與重啟 264 8.8本章習題 267 第9章Tomcat線程池技術 268 9.1自定義ThreadPoolExecutor 268 9.2Tomcat任務隊列 270 9.3Tomcat任務線程 270 9.4Tomcat任務線程工廠 271 9.5Tomcat連接器與線程池 272 9.6創建Tomcat線程池 274 9.7Web服務器異步環境 275 案例:AsyncContext調用業務方法 276 9.8Web服務器NIO 278 案例:服務器NIO處理請求 279 9.9本章習題 281 第10章并發編程應用 283 10.1JVM與多線程 283 10.2Servlet與多線程 284 10.3懶漢與惡漢模式 286 10.4數據庫Connection與多線程 288 10.4.1ThreadLocal與線程私有數據 289 10.4.2ThreadLocal存儲數據庫Connection 291 10.4.3ThreadLocal實現Connectionperlogic模式 293 10.4.4ThreadLocal實現Connectionperrequest模式 294 10.5高并發網站的PageView統計 295 10.6生成唯一的訂單號 296 10.7瀏覽器并發請求限制 298 10.8NIO與多路復用 301 10.9遠程異步訪問 302 10.10防止緩存雪崩的DCL機制 305 10.11分布式鎖解決商品超賣 309 參考文獻 314 IV V 《Java多線程與線程池技術詳解》全面、系統地講解了多線程和線程池技術。
《Java多線程與線程池技術詳解》共分為10章,第1~3章為基本的多線程技術基礎,包含創建線程、線程狀態轉換、線程間同步等內容。第4~8章為線程池技術,包含自定義線程池、通過Executors工具類創建線程池、線程池的底層阻塞隊列結構、重入鎖等內容。第9章和第10章為多線程技術的應用部分,包含基于Tomcat的線程池應用、基于ThreadLocal的數據庫連接管理、生成唯一的訂單號等內容。 《Java多線程與線程池技術詳解》提供了大量應用實例,每章后面均附有習題。 《Java多線程與線程池技術詳解》適合作為高等院校計算機、軟件工程專業高年級本科生、研究生的教材,同時可供有一定編程經驗的軟件開發人員、廣大科技工作者和研究人員在進行多線程編程時參考使用。 一、為什么要寫本書
1965年,戈登·摩爾發現了一個驚人的集成電路發展趨勢:當價格不變時,集成電路上可容納的元器件的數目,每18~24個月會增加一倍,性能也將提升一倍。如果這個趨勢繼續,計算能力相對于時間周期將呈指數式的上升,這被稱為摩爾定律。 50多年過去了,摩爾定律目前仍然沒有被打破,但是馬上就要面臨巨大的物理瓶頸。現在的最好的芯片技術是臺積電的5nm工藝,下一個目標是3nm,而硅原子在1nm空間只能排列三四個。這對于依賴硅為半導體材料的芯片產業而言,如果沒有新的半導體材料出現,其很快就將面臨物理極限挑戰。 多核處理器技術是硬件發展的另一大趨勢。通過使用CPU多核架構,可以有效緩解單個芯片運算能力不足帶來的尷尬。現在幾乎所有的筆記本計算機、臺式計算機,還有服務器等普遍使用了多核處理器。多核CPU的普及要求系統軟件和應用軟件架構必須要與時俱進。因此,掌握并發編程技術,開發出適用于多核處理器的并發程序,充分利用CPU的并發處理優勢,是對所有高級軟件開發人員的硬性要求。 目前,Java平臺在服務器端的后臺編程中占據著無法動搖的統治地位,如典型的Web服務器就是一個允許幾十萬人同時訪問的高并發環境。因此Java的高并發編程是每一個Java編程人員必須要掌握的核心知識。 高并發處理不僅在Web服務器上,在應用服務器、數據庫服務器、大數據服務器等服務器上,同樣都是高并發環境,當然在不同服務器上的軟件架構是完全不同的。 多線程的并發編程從來都不是一件容易的事情,即使對高級軟件架構人員也是如此。Java平臺關于多線程部分的API,歷經多次頻繁地調整,始終無法穩定下來,死鎖和CPU利用率不高一直困擾著這些高級架構師。直到2004年,大神級的Doug Lea橫空出世,在JDK5中推出了java.util.concurrent 開發包,這才使Java徹底穩住了陣腳。 Java多線程基礎庫穩定后,服務器并發編程技術發展迅速,目前基于Java EE 8規范的服務器性能更加優秀。本書中包含的所有案例均基于JDK1.8 版本并已調試成功。 二、內容特色 與同類書籍相比,本書有如下特色。 1. 案例生動易懂,讀者入門容易 國外關于多線程編程的經典圖書,大多晦澀難懂,讓人看后感覺云山霧罩、一頭霧水;國內多線程相關書籍又過于淺顯。因此,市場上沒有一本讓多數讀者感覺滿意的多線程圖書,尤其是高校本科生和研究生,想選擇一本多線程教材是非常困難的。本書中的大量案例,都貼合實際生活,生動鮮活,容易記憶,容易理解,讀者可以輕松上手。 2. 原理透徹,注重應用 本書對多線程相關理論分門別類、層層遞進地進行了詳細的敘述和透徹的分析,既體現了各知識點之間的聯系,又兼顧了其漸近性。本書在介紹每個知識點時都給出了該知識點的應用場景,同時配合源代碼分析;本書真正體現了理論聯系實際的理念,使讀者能夠體會到“學以致用”的樂趣。 3. 配套資源,超值服務 本書提供以下相關配套資源: * 書中涉及的程序代碼、習題答案,可以關注“人工智能科學與技術”微信公眾號,在“知識”→“資源下載”→“配書資源”菜單獲取下載鏈接(也可以到清華大學出版社網站本書頁面下載)。 * 本書有完整的配套視頻,可以到CSDN、51CTO、騰訊課堂等網站觀看,最簡單的入口就是在百度直接搜索:肖海鵬,即可找到各網站的視頻入口。在配套資源中也有視頻觀看鏈接(注:配套視頻請讀者自行購買觀看)。 三、結構安排 本書第1~3章為多線程基礎知識,第4~8章為線程池技術,第9章和第10章為多線程技術應用。 四、讀者對象 * 電子信息工程、計算機科學與技術相關專業的本科生、研究生; * 所有Java軟件開發人員。 五、致謝 限于編者的水平和經驗,加之時間比較倉促,疏漏之處在所難免,敬請讀者批評指正,有興趣的朋友可發送郵件。 編者 2021年3月于北京 |