圖解 Java 多線程設計模式 图解Java多线程设计模式

結城浩

立即出貨 (庫存=1)

買這商品的人也買了...

相關主題

商品描述

本書通過具體的Java 程序,以淺顯易懂的語言逐一說明瞭多線程和並發處理中常用的12 種設計模式。內容涉及線程的基礎知識、線程的啟動與終止、線程間的互斥處理與協作、線程的有效應用、線程的數量管理以及性能優化的註意事項等。此外,還介紹了一些多線程編程時容易出現的失誤,以及多線程程序的閱讀技巧等。在講解過程中,不僅以圖配文,理論結合實例,而且提供了運用模式解決具體問題的練習題和答案,幫助讀者加深對多線程和並發處理的理解,並掌握其使用技巧。

作者簡介

結城浩(作者)
生於1963年,日本資-深技術作家和程序員。在編程語言、設計模式、數學、加密技術等領域,編寫了很多深受歡迎的入門書。代表作有《數學女孩》系列、《程序員的數學》、《圖解密碼技術》等。

侯振龍(譯者)
管理科學與工程專業碩士,日語一級,軟件開發工程師,具有十年對日軟件開發經驗,現就職於某日本獨資企業。

楊文軒(譯者)
華中科技大學碩士,擅長Web 2.0開發,有豐富的對日開發經驗。現就職於日本方正股份有限公司。譯作有《圖解基礎設施設計模式》《C現代編程:集成開發環境、設計模式、極限編程、測試驅動開發、重構、持續集成》及《圖解設計模式》。

目錄大綱

序章
1 Java線程1 
1.1 Java線程2 
1.2何謂線程2 
明為跟踪處理流程,實為跟踪線程2 
單線程程序3 
多線程程序4 
Thread類的run方法和start方法5 
1.3線程的啟動9 
線程的啟動(1)——利用Thread類的子類9 
線程的啟動(2)——利用Runnable接口10 
1.4線程的暫停12 
1.5線程的互斥處理13 
synchronized方法14 
synchronized代碼塊17 
1.6線程的協作18 
等待隊列——線程休息室19 
wait方法——將線程放入等待隊列19 
notify方法——從等待隊列中取出線程21 
notifyAll方法——從等待隊列中取出所有線程23 
wait、notify、notifyAll是Object類的方法24 
1.7線程的狀態遷移24 
1.8線程相關的其他話題26 
1.9本章所學知識26 
1.10練習題26 

序章2多線程程序的評價標準31 
2.1多線程程序的評價標準32 
安全性——不損壞對象32
生存性——必要的處理能夠被執行32 
可複用性——類可重複利用33 
性能——能快速、大批量地執行處理33 
評價標準總結33 
2.2本章所學知識34 
2.3練習題34
 
第1章Single Threaded Execution模式——能通過這座橋的只有一個人35 
1.1 Single Threaded Execution模式36 
1.2示例程序1:不使用Single Threaded Execution模式的程序36 
Main類37 
非線程安全的Gate類37 
UserThread類38 
執行起來看看……出錯了39 
為什麼會出錯呢40 
1.3示例程序2:使用Single Threaded Execution模式的程序41 
線程安全的Gate類41 
synchronized的作用42 
1.4 Single Threaded Execution模式中的登場角色43 
1.5拓展思路的要點44 
何時使用(可使用Single Threaded Execution模式的情況) 44 
生存性與死鎖45 
可複用性和繼承反常46 
臨界區的大小和性能46 
1.6相關的設計模式47 
Guarded Suspension模式47
Read—Write Lock模式47 
Immutable模式47 
Thread—Specific Storage模式48 
1.7延伸閱讀1:關於synchronized 48 
synchronized語法與Before/After模式48 
synchronized在保護著什麼49 
該以什麼單位來保護呢50 
使用哪個鎖保護50 
原子操作51 
long與double的操作不是原子的51 
1.8延伸閱讀2:java.util.concurrent包和計數信號量52 
計數信號量和Semaphore類52 
使用Semaphore類的示例程序52 
1.9本章所學知識55 
1.10練習題55 

第2章Immutable模式——想破壞也破壞不了61 
2.1 Immutable模式62 
2.2示例程序62 
使用Immutable模式的Person類62 
Main類63 
PrintPersonThread類63 
2.3 Immutable模式中的登場角色65 
2.4拓展思路的要點66 
何時使用(可使用Immutable模式的情況) 66 
考慮成對的mutable類和immutable類(性能) 66 
為了確保不可變性(可複用性) 67
標準類庫中用到的Immutable模式67 
2.5相關的設計模式69 
Single Threaded Execution模式69 
Read—Write Lock模式69 
Flyweight模式69 
2.6延伸閱讀1:final 69 
final的含義69 
2.7延伸閱讀2:集合類與多線程71 
示例1:非線程安全的java.util.ArrayList類71 
示例2:利用Collections.synchronizedList方法所進行的同步74 
示例3:使用copy—on—write的java.util.concurrent.CopyOnWriteArrayList類75 
2.8本章所學知識76 
2.9練習題77 

第3章Guarded Suspension模式——等我準備好哦81 
3.1 Guarded Suspension模式82 
3.2示例程序82 
Request類83 
RequestQueue類84 
ClientThread類85 
ServerThread類85 
Main類86 
java.util. Queue與java.util.LinkedList的操作87 
getRequest詳解87 
putRequest詳解89
synchronized的含義89 
wait與鎖89 
3.3 Guarded Suspension模式中的登場角色90 
3.4拓展思路的要點91 
附加條件的synchronized 91 
多線程版本的if 91 
忘記改變狀態與生存性91 
wait與notify/notifyAll的責任(可復用性) 91 
各種稱呼91 
使用java.util.concurrent.LinkedBlockingQueue的示例程序93 
3.5相關的設計模式94 
Single Threaded Execution模式94 
Balking模式94 
Producer—Consumer模式94 
Future模式94 
3.6本章所學知識95 
3.7練習題95 

第4章Balking模式——不需要就算了99 
4.1 Balking模式100 
4.2示例程序100 
Data類100 
SaverThread類102 
ChangerThread類102 
Main類103 
4.3 Balking模式中的登場角色105 
4.4拓展思路的要點106 
何時使用(可使用Balking模式的情況) 106
balk結果的表示方式107 
4.5相關的設計模式107 
Guarded Suspension模式107 
Observer模式107 
4.6延伸閱讀:超時108 
Balking模式和Guarded Suspension模式之間108 
wait何時終止呢108 
guarded timed的實現(使用wait) 109 
synchronized中沒有超時,也不能中斷110 
java.util.concurrent中的超時111 
4.7本章所學知識111 
4.8練習題112 

第5章Producer—Consumer模式——我來做,你來用115 
5.1 Producer—Consumer模式116 
5.2示例程序116 
Main類116 
MakerThread類117 
EaterThread類118 
Table類118 
解讀put方法120 
解讀take方法121 
5.3 Producer—Consumer模式中的登場角色122 
5.4拓展思路的要點123 
守護安全性的Channel角色(可複用性) 123 
不可以直接傳遞嗎124 
Channel角色的剩餘空間所導致的問題124
以什麼順序傳遞Data角色呢125 
“存在中間角色”的意義125 
Consumer角色只有一個時會怎麼樣呢126 
5.5相關的設計模式126 
Mediator模式126 
Worker Thread模式126 
Command模式126 
Strategy模式127 
5.6延伸閱讀1:理解InterruptedException異常127 
可能會花費時間,但可以取消127 
加了throwsInterruptedException的方法127 
sleep方法和interrupt方法128 
wait方法和interrupt方法128 
join方法和interrupt方法129 
interrupt方法只是改變中斷狀態129 
isInterrupted方法——檢查中斷狀態130 
Thread.interrupted方法——檢查並清除中斷狀態130 
不可以使用Thread類的stop方法130 
5.7延伸閱讀2:java.util.concurrent包和Producer—Consumer模式131 
java.util.concurrent包中的隊列131 
使用java.util.concurrent.ArrayBlockingQueue的示例程序132 
使用java.util.concurrent.Exchanger類交換緩衝區133
5.8本章所學知識136 
5.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 
附錄