關(guān)于我們
書單推薦
新書推薦
|
圖解Java多線程設(shè)計(jì)模式
本書通過(guò)具體的Java 程序,以淺顯易懂的語(yǔ)言逐一說(shuō)明了多線程和并發(fā)處理中常用的12 種設(shè)計(jì)模式。內(nèi)容涉及線程的基礎(chǔ)知識(shí)、線程的啟動(dòng)與終止、線程間的互斥處理與協(xié)作、線程的有效應(yīng)用、線程的數(shù)量管理以及性能優(yōu)化的注意事項(xiàng)等。此外,還介紹了一些多線程編程時(shí)容易出現(xiàn)的失誤,以及多線程程序的閱讀技巧等。在講解過(guò)程中,不僅以圖配文,理論結(jié)合實(shí)例,而且提供了運(yùn)用模式解決具體問(wèn)題的練習(xí)題和答案,幫助讀者加深對(duì)多線程和并發(fā)處理的理解,并掌握其使用技巧。
精選12種與多線程和并發(fā)處理相關(guān)的設(shè)計(jì)模式
264張圖表 300段Java示例程序 = 輕松學(xué)習(xí)多線程編程
日本經(jīng)典多線程入門書,原版長(zhǎng)銷11年!
1.圖文并茂 通俗易懂
日本資-深技術(shù)作家、《程序員的數(shù)學(xué)》作者結(jié)城浩執(zhí)筆,264張圖表(UML類圖、時(shí)序圖、Timethreads圖等)穿插文中,通過(guò)類比手法和淺顯的語(yǔ)言,逐一講解與多線程和并發(fā)處理相關(guān)的12種設(shè)計(jì)模式。每章附帶練習(xí)題和答案,自學(xué)者也可輕松學(xué)習(xí)
2.專業(yè)實(shí)用 拓展進(jìn)階
編寫了300個(gè)示例程序來(lái)實(shí)現(xiàn)設(shè)計(jì)模式,掌握這些設(shè)計(jì)模式可以避免程序發(fā)生死鎖、節(jié)省資源、提高性能等,讓多線程程序更高效。java.util.concurrent包、synchronized關(guān)鍵字、Swing框架、Java內(nèi)存模型等內(nèi)容也均有涉及,不僅能夠了解Java多線程的相關(guān)知識(shí),還可加深對(duì)Java語(yǔ)言的理解。
本書適合以下讀者閱讀
a.對(duì)多線程感興趣的人
b.對(duì)Java編程感興趣的人
c.對(duì)設(shè)計(jì)模式感興趣的人
d.對(duì)面向?qū)ο箝_(kāi)發(fā)感興趣的人
結(jié)城浩(作者)
生于1963年,日本資-深技術(shù)作家和程序員。在編程語(yǔ)言、設(shè)計(jì)模式、數(shù)學(xué)、加密技術(shù)等領(lǐng)域,編寫了很多深受歡迎的入門書。代表作有《數(shù)學(xué)女孩》系列、《程序員的數(shù)學(xué)》、《圖解密碼技術(shù)》等。
侯振龍(譯者)
管理科學(xué)與工程專業(yè)碩士,日語(yǔ)一級(jí),軟件開(kāi)發(fā)工程師,具有十年對(duì)日軟件開(kāi)發(fā)經(jīng)驗(yàn),現(xiàn)就職于某日本獨(dú)資企業(yè)。
楊文軒(譯者)
華中科技大學(xué)碩士,擅長(zhǎng)Web 2.0開(kāi)發(fā),有豐富的對(duì)日開(kāi)發(fā)經(jīng)驗(yàn),F(xiàn)就職于日本方正股份有限公司。譯作有《圖解基礎(chǔ)設(shè)施設(shè)計(jì)模式》《C現(xiàn)代編程:集成開(kāi)發(fā)環(huán)境、設(shè)計(jì)模式、極限編程、測(cè)試驅(qū)動(dòng)開(kāi)發(fā)、重構(gòu)、持續(xù)集成》及《圖解設(shè)計(jì)模式》。
序章1Java線程1
I1.1Java線程2 I1.2何謂線程2 明為跟蹤處理流程,實(shí)為跟蹤線程2 單線程程序3 多線程程序4 Thread類的run方法和start方法5 I1.3線程的啟動(dòng)9 線程的啟動(dòng)(1)利用Thread類的子類9 線程的啟動(dòng)(2)利用Runnable接口10 I1.4線程的暫停12 I1.5線程的互斥處理13 synchronized方法14 synchronized代碼塊17 I1.6線程的協(xié)作18 等待隊(duì)列線程休息室19 wait方法將線程放入等待隊(duì)列19 notify方法從等待隊(duì)列中取出線程21 notifyAll方法從等待隊(duì)列中取出所有線程23 wait、notify、notifyAll是Object類的方法24 I1.7線程的狀態(tài)遷移24 I1.8線程相關(guān)的其他話題26 I1.9本章所學(xué)知識(shí)26 I1.10練習(xí)題26 序章2多線程程序的評(píng)價(jià)標(biāo)準(zhǔn)31 I2.1多線程程序的評(píng)價(jià)標(biāo)準(zhǔn)32 安全性不損壞對(duì)象32 生存性必要的處理能夠被執(zhí)行32 可復(fù)用性類可重復(fù)利用33 性能能快速、大批量地執(zhí)行處理33 評(píng)價(jià)標(biāo)準(zhǔn)總結(jié)33 I2.2本章所學(xué)知識(shí)34 I2.3練習(xí)題34 第1章Single Threaded Execution模式能通過(guò)這座橋的只有一個(gè)人35 1.1Single Threaded Execution模式36 1.2示例程序1:不使用Single Threaded Execution模式的程序36 Main類37 非線程安全的Gate類37 UserThread類38 執(zhí)行起來(lái)看看……出錯(cuò)了39 為什么會(huì)出錯(cuò)呢40 1.3示例程序2:使用Single Threaded Execution模式的程序41 線程安全的Gate類41 synchronized的作用42 1.4Single Threaded Execution模式中的登場(chǎng)角色43 1.5拓展思路的要點(diǎn)44 何時(shí)使用(可使用Single Threaded Execution模式的情況)44 生存性與死鎖45 可復(fù)用性和繼承反常46 臨界區(qū)的大小和性能46 1.6相關(guān)的設(shè)計(jì)模式47 Guarded Suspension模式47 Read-Write Lock模式47 Immutable模式47 Thread-Specific Storage模式48 1.7延伸閱讀1:關(guān)于synchronized48 synchronized語(yǔ)法與Before/After模式48 synchronized在保護(hù)著什么49 該以什么單位來(lái)保護(hù)呢50 使用哪個(gè)鎖保護(hù)50 原子操作51 long與double的操作不是原子的51 1.8延伸閱讀2:java.util.concurrent包和計(jì)數(shù)信號(hào)量52 計(jì)數(shù)信號(hào)量和Semaphore類52 使用Semaphore類的示例程序52 1.9本章所學(xué)知識(shí)55 1.10練習(xí)題55 第2章Immutable模式想破壞也破壞不了61 2.1Immutable模式62 2.2示例程序62 使用Immutable模式的Person類62 Main類63 PrintPersonThread類63 2.3Immutable模式中的登場(chǎng)角色65 2.4拓展思路的要點(diǎn)66 何時(shí)使用(可使用Immutable模式的情況)66 考慮成對(duì)的mutable類和immutable類 [性能]66 為了確保不可變性 [可復(fù)用性]67 標(biāo)準(zhǔn)類庫(kù)中用到的Immutable模式67 2.5相關(guān)的設(shè)計(jì)模式69 Single Threaded Execution模式69 Read-Write Lock模式69 Flyweight模式69 2.6延伸閱讀1:final69 final的含義69 2.7延伸閱讀2:集合類與多線程71 示例1:非線程安全的java.util.ArrayList類71 示例2:利用Collections.synchronizedList方法所進(jìn)行的同步74 示例3:使用copy-on-write的java.util.concurrent.CopyOnWriteArrayList類75 2.8本章所學(xué)知識(shí)76 2.9練習(xí)題77 第3章Guarded Suspension模式等我準(zhǔn)備好哦81 3.1Guarded 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.3Guarded Suspension模式中的登場(chǎng)角色90 3.4拓展思路的要點(diǎn)91 附加條件的synchronized91 多線程版本的if91 忘記改變狀態(tài)與生存性91 wait與notify/notifyAll的責(zé)任 [可復(fù)用性]91 各種稱呼91 使用java.util.concurrent.LinkedBlockingQueue的示例程序93 3.5相關(guān)的設(shè)計(jì)模式94 Single Threaded Execution模式94 Balking模式94 Producer-Consumer模式94 Future模式94 3.6本章所學(xué)知識(shí)95 3.7練習(xí)題95 第4章Balking模式不需要就算了99 4.1Balking模式100 4.2示例程序100 Data類100 SaverThread類102 ChangerThread類102 Main類103 4.3Balking模式中的登場(chǎng)角色105 4.4拓展思路的要點(diǎn)106 何時(shí)使用(可使用Balking模式的情況)106 balk結(jié)果的表示方式107 4.5相關(guān)的設(shè)計(jì)模式107 Guarded Suspension模式107 Observer模式107 4.6延伸閱讀:超時(shí)108 Balking模式和Guarded Suspension模式之間108 wait何時(shí)終止呢108 guarded timed的實(shí)現(xiàn)(使用wait)109 synchronized中沒(méi)有超時(shí),也不能中斷110 java.util.concurrent中的超時(shí)111 4.7 本章所學(xué)知識(shí)111 4.8 練習(xí)題112 第5章Producer-Consumer模式我來(lái)做,你來(lái)用115 5.1Producer-Consumer模式116 5.2示例程序116 Main類116 MakerThread類117 EaterThread類118 Table類118 解讀put方法120 解讀take方法121 5.3Producer-Consumer模式中的登場(chǎng)角色122 5.4拓展思路的要點(diǎn)123 守護(hù)安全性的Channel角色(可復(fù)用性)123 不可以直接傳遞嗎124 Channel角色的剩余空間所導(dǎo)致的問(wèn)題124 以什么順序傳遞Data角色呢125 存在中間角色的意義125 Consumer角色只有一個(gè)時(shí)會(huì)怎么樣呢126 5.5相關(guān)的設(shè)計(jì)模式126 Mediator模式126 Worker Thread模式126 Command模式126 Strategy模式127 5.6延伸閱讀1:理解InterruptedException異常127 可能會(huì)花費(fèi)時(shí)間,但可以取消127 加了throws InterruptedException的方法127 sleep方法和interrupt方法128 wait方法和interrupt方法128 join方法和interrupt方法129 interrupt方法只是改變中斷狀態(tài)129 isInterrupted方法檢查中斷狀態(tài)130 Thread.interrupted方法檢查并清除中斷狀態(tài)130 不可以使用Thread類的stop方法130 5.7延伸閱讀2:java.util.concurrent包和Producer-Consumer模式131 java.util.concurrent包中的隊(duì)列131 使用java.util.concurrent.ArrayBlockingQueue的示例程序132 使用java.util.concurrent.Exchanger類交換緩沖區(qū)133 5.8本章所學(xué)知識(shí)136 5.9練習(xí)題137 第6章Read-Write Lock模式大家一起讀沒(méi)問(wèn)題,但讀的時(shí)候不要寫哦141 6.1Read-Write Lock模式142 6.2示例程序142 Main類143 Data類143 WriterThread類146 ReaderThread類146 ReadWriteLock類147 執(zhí)行起來(lái)看看149 守護(hù)條件的確認(rèn)150 6.3Read-Write Lock模式中的登場(chǎng)角色151 6.4拓展思路的要點(diǎn)153 利用讀取操作的線程之間不會(huì)沖突的特性來(lái)提高程序性能153 適合讀取操作繁重時(shí)153 適合讀取頻率比寫入頻率高時(shí)153 鎖的含義153 6.5相關(guān)的設(shè)計(jì)模式154 Immutable模式154 Single Threaded Execution模式154 Guarded Suspension模式154 Before/After模式154 Strategized Locking模式154 6.6延伸閱讀:java.util.concurrent.locks包和Read-Write Lock模式154 java.util.concurrent.locks包154 使用java.util.concurrent.locks的示例程序155 6.7本章所學(xué)知識(shí)156 6.8練習(xí)題157 第7章Thread-Per-Message模式這項(xiàng)工作就交給你了163 7.1Thread-Per-Message模式164 7.2示例程序164 Main類164 Host類165 Helper類166 7.3Thread-Per-Message模式中的登場(chǎng)角色168 7.4拓展思路的要點(diǎn)169 提高響應(yīng)性,縮短延遲時(shí)間169 適用于操作順序沒(méi)有要求時(shí)169 適用于不需要返回值時(shí)169 應(yīng)用于服務(wù)器169 調(diào)用方法+啟動(dòng)線程發(fā)送消息170 7.5相關(guān)的設(shè)計(jì)模式170 Future模式170 Worker Thread模式170 7.6延伸閱讀1:進(jìn)程與線程171 7.7延伸閱讀2:java.util.concurrent包和Thread-Per-Message模式171 java.lang.Thread類171 java.lang.Runnable接口172 java.util.concurrent.ThreadFactory接口173 java.util.concurrent.Executors類獲取的ThreadFactory174 java.util.concurrent.Executor接口175 java.util.concurrent.ExecutorService接口176 java.util.concurrent.ScheduledExecutorService類177 總結(jié)178 7.8本章所學(xué)知識(shí)180 7.9練習(xí)題180 第8章Worker Thread模式工作沒(méi)來(lái)就一直等,工作來(lái)了就干活187 8.1Worker Thread模式188 8.2示例程序188 Main類189 ClientThread類190 Request類190 Channel類191 WorkerThread類192 8.3Worker Thread模式中的登場(chǎng)角色193 8.4拓展思路的要點(diǎn)195 提高吞吐量195 容量控制195 調(diào)用與執(zhí)行的分離196 Runnable接口的意義197 多態(tài)的Request角色198 獨(dú)自一人的Worker角色199 8.5相關(guān)的設(shè)計(jì)模式199 Producer-Consumer模式199 Thread-Per-Message模式199 Command模式199 Future模式199 Flyweight模式199 Thread-Specific Storage模式200 Active Ojbect模式200 8.6延伸閱讀1:Swing事件分發(fā)線程200 什么是事件分發(fā)線程200 事件分發(fā)線程只有一個(gè)200 事件分發(fā)線程調(diào)用監(jiān)聽(tīng)器201 注冊(cè)監(jiān)聽(tīng)器的意義201 事件分發(fā)線程也負(fù)責(zé)繪制界面201 javax.swing.SwingUtilities類202 Swing的單線程規(guī)則203 8.7延伸閱讀2:java.util.concurrent包和Worker Thread模式204 ThreadPoolExecutor類204 通過(guò)java.util.concurrent包創(chuàng)建線程池205 8.8本章所學(xué)知識(shí)207 8.9練習(xí)題208 第9章Future模式先給您提貨單211 9.1Future模式212 9.2示例程序212 Main類214 Host類214 Data接口215 FutureData類216 RealData類217 9.3Future模式中的登場(chǎng)角色218 9.4拓展思路的要點(diǎn)219 吞吐量會(huì)提高嗎219 異步方法調(diào)用的返回值220 準(zhǔn)備返回值和使用返回值的分離220 變種不讓主線程久等的Future角色220 變種會(huì)發(fā)生變化的Future角色221 誰(shuí)會(huì)在意多線程呢?可復(fù)用性221 回調(diào)與Future模式221 9.5相關(guān)的設(shè)計(jì)模式222 Thread-Per-Message模式222 Builder模式222 Proxy模式222 Guarded Suspension模式222 Balking模式222 9.6延伸閱讀:java.util.concurrent包與Future模式222 java.util.concurrent包222 使用了java.util.concurrent包的示例程序223 9.7本章所學(xué)知識(shí)226 9.8練習(xí)題226 第10章Two-Phase Termination模式先收拾房間再睡覺(jué)231 10.1Two-Phase Termination模式232 10.2示例程序233 CountupThread類234 Main類236 10.3Two-Phase Termination模式中的登場(chǎng)角色237 10.4拓展思路的要點(diǎn)238 不能使用Thread類的stop方法238 僅僅檢查標(biāo)志是不夠的239 僅僅檢查中斷狀態(tài)是不夠的239 在長(zhǎng)時(shí)間處理前檢查終止請(qǐng)求239 join方法和isAlive方法240 java.util.concurrent.ExecutorService接口與Two-Phase Termination模式240 要捕獲程序整體的終止時(shí)241 優(yōu)雅地終止線程243 10.5相關(guān)的設(shè)計(jì)模式243 Before/After模式243 Multiphase Cancellation模式243 Multi-Phase Startup模式244 Balking模式244 10.6延伸閱讀1:中斷狀態(tài)與InterruptedException異常的相互轉(zhuǎn)換244 中斷狀態(tài)InterruptedException異常的轉(zhuǎn)換244 InterruptedException異常中斷狀態(tài)的轉(zhuǎn)換245 InterruptedException異常InterruptedException異常的轉(zhuǎn)換245 10.7延伸閱讀2:java.util.concurrent包與線程同步246 java.util.concurrent.CountDownLatch類246 java.util.concurrent.CyclicBarrier類249 10.8本章所學(xué)知識(shí)253 10.9練習(xí)題253 第11章Thread-Specific Storage模式一個(gè)線程一個(gè)儲(chǔ)物柜263 11.1Thread-Specific Storage模式264 11.2關(guān)于java.lang.ThreadLocal類264 java.lang.ThreadLocal就是儲(chǔ)物間264 java.lang.ThreadLocal與泛型265 11.3示例程序1:不使用Thread-Specific Storage模式的示例265 Log類266 Main類266 11.4示例程序2:使用了Thread-Specific Storage模式的示例267 線程特有的TSLog類268 Log類269 ClientThread類270 Main類271 11.5Thread-Specific Storage模式中的登場(chǎng)角色272 11.6拓展思路的要點(diǎn)274 局部變量與java.lang.ThreadLocal類274 保存線程特有的信息的位置275 不必?fù)?dān)心其他線程訪問(wèn)275 吞吐量的提高很大程序上取決于實(shí)現(xiàn)方式276 上下文的危險(xiǎn)性276 11.7相關(guān)的設(shè)計(jì)模式277 Singleton模式277 Worker Thread模式277 Single Threaded Execution模式277 Proxy模式277 11.8 延伸閱讀:基于角色與基于任務(wù)277 主體與客體277 基于角色的考慮方式278 基于任務(wù)的考慮方式278 實(shí)際上兩種方式是綜合在一起的279 11.9本章所學(xué)知識(shí)279 11.10練習(xí)題280 第12章Active Object模式接收異步消息的主動(dòng)對(duì)象283 12.1Active Object模式284 12.2示例程序1284 調(diào)用方:Main類287 調(diào)用方:MakerClientThread類288 調(diào)用方:DisplayClientThread類289 主動(dòng)對(duì)象方:ActiveObject接口289 主動(dòng)對(duì)象方:ActiveObjectFactory類290 主動(dòng)對(duì)象方:Proxy類290 主動(dòng)對(duì)象方:SchedulerThread類291 主動(dòng)對(duì)象方:ActivationQueue類292 主動(dòng)對(duì)象方:MethodRequest類293 主動(dòng)對(duì)象方:MakeStringRequest類294 主動(dòng)對(duì)象方:DisplayStringRequest類295 主動(dòng)對(duì)象方:Result類295 主動(dòng)對(duì)象方:FutureResult類296 主動(dòng)對(duì)象方:RealResult類296 主動(dòng)對(duì)象方:Servant類297 示例程序1的運(yùn)行297 12.3ActiveObject模式中的登場(chǎng)角色298 12.4拓展思路的要點(diǎn)304 到底做了些什么事情304 運(yùn)用模式時(shí)需要考慮問(wèn)題的粒度304 關(guān)于并發(fā)性304 增加方法305 Scheduler角色的作用305 主動(dòng)對(duì)象之間的交互306 通往分布式從跨越線程界線變?yōu)榭缭接?jì)算機(jī)界線306 12.5相關(guān)的設(shè)計(jì)模式306 Producer-Consumer模式306 Future模式307 Worker Thread模式307 Thread-Specific Storage模式307 12.6延伸閱讀:java.util.concurrent包與Active Object模式307 類與接口307 調(diào)用方:Main類309 調(diào)用方:MakerClientThread類309 調(diào)用方:DisplayClientThread類310 主動(dòng)對(duì)象方:ActiveObject接口311 主動(dòng)對(duì)象方:ActiveObjectFactory類311 主動(dòng)對(duì)象:ActiveObjectImpl類312 示例程序2的運(yùn)行313 12.7本章所學(xué)知識(shí)314 12.8練習(xí)題315 第13章總結(jié)多線程編程的模式語(yǔ)言321 13.1多線程編程的模式語(yǔ)言322 模式與模式語(yǔ)言322 13.2Single Threaded Execution模式 能通過(guò)這座橋的只有一個(gè)人323 13.3 Immutable模式 想破壞也破壞不了324 13.4 Guarded Suspension模式 等我準(zhǔn)備好哦325 13.5 Balking模式 不需要就算了326 13.6 Producer-Consumer模式 我來(lái)做,你來(lái)用327 13.7 Read-Write Lock模式 大家一起讀沒(méi)問(wèn)題,但讀的時(shí)候不要寫哦328 13.8 Thread-Per-Message模式 這項(xiàng)工作就交給你了329 13.9 Worker Thread模式 工作沒(méi)來(lái)就一直等,工作來(lái)了就干活330 13.10Future模式 先給您提貨單330 13.11Two-Phase Termination模式 先收拾房間再睡覺(jué)331 13.12Thread-Specific Storage模式 一個(gè)線程一個(gè)儲(chǔ)物柜332 13.13Active Object模式 接收異步消息的主動(dòng)對(duì)象333 13.14寫在最后335 附錄337 附錄A 習(xí)題解答338 附錄B Java內(nèi)存模型447 附錄C Java線程的優(yōu)先級(jí)467 附錄D 線程相關(guān)的主要API469 附錄E java.util.concurrent包475 附錄F 示例程序的運(yùn)行步驟483 附錄G 參考文獻(xiàn)485
你還可能感興趣
我要評(píng)論
|