3dwoo大學簡體電腦書店
Java并發編程:核心方法與框架
( 簡體 字)
作者:高洪巖 著類別:1. -> 程式設計 -> JAVA -> Java
出版社:機械工業出版社Java并發編程:核心方法與框架 3dWoo書號: 44084
詢問書籍請說出此書號!
有庫存
NT售價: 395
出版日:5/1/2016
頁數:352
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787111535218 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
前言

第1章 Semaphore和Exchanger的使用 1

1.1 Semaphore的使用 2

1.1.1 類Semaphore的同步性 2

1.1.2 類Semaphore構造方法permits參數作用 4

1.1.3 方法acquire(int permits)參數作用及動態添加permits許可數量 5

1.1.4 方法acquireUninterruptibly()的使用 8

1.1.5 方法availablePermits()和drainPermits() 10

1.1.6 方法getQueueLength()和hasQueuedThreads() 12

1.1.7 公平與非公平信號量的測試 13

1.1.8 方法tryAcquire()的使用 15

1.1.9 方法tryAcquire(int permits)的使用 17

1.1.10 方法tryAcquire(long timeout, TimeUnit unit)的使用 17

1.1.11 方法tryAcquire(int permits, long timeout, TimeUnit unit)的使用 19

1.1.12 多進路-多處理-多出路實驗 20

1.1.13 多進路-單處理-多出路實驗 21

1.1.14 使用Semaphore創建字符串池 23

1.1.15 使用Semaphore實現多生產者/多消費者模式 25

1.2 Exchanger的使用 31

1.2.1 方法exchange()阻塞的特性 31

1.2.2 方法exchange()傳遞數據 32

1.2.3 方法exchange(V x, long timeout, TimeUnit unit)與超時 34

1.3 本章總結 35

第2章 CountDownLatch和CyclicBarrier的使用 36

2.1 CountDownLatch的使用 36

2.1.1 初步使用 37

2.1.2 裁判在等全部的運動員到來 38

2.1.3 各就各位準備比賽 39

2.1.4 完整的比賽流程 41

2.1.5 方法await(long timeout, TimeUnit unit) 44

2.1.6 方法getCount()的使用 46

2.2 CyclicBarrier的使用 46

2.2.1 初步使用 48

2.2.2 驗證屏障重置性及getNumberWaiting()方法的使用 51

2.2.3 用CyclicBarrier類實現階段跑步比賽 52

2.2.4 方法isBroken()的使用 55

2.2.5 方法await(long timeout, TimeUnit unit)超時出現異常的測試 57

2.2.6 方法getNumberWaiting()和getParties() 60

2.2.7 方法reset() 62

2.3 本章總結 64

第3章 Phaser的使用 65

3.1 Phaser的使用 66

3.2 類Phaser的arriveAndAwaitAdvance()方法測試1 66

3.3 類Phaser的arriveAndAwaitAdvance()方法測試2 68

3.4 類Phaser的arriveAndDeregister()方法測試 69

3.5 類Phaser的getPhase()和onAdvance()方法測試 70

3.6 類Phaser的getRegisteredParties()方法和register()測試 74

3.7 類Phaser的bulkRegister()方法測試 75

3.8 類Phaser的getArrivedParties()和getUnarrivedParties()方法測試 75

3.9 類Phaser的arrive()方法測試1 77

3.10 類Phaser的arrive ()方法測試2 78

3.11 類Phaser的awaitAdvance(int phase)方法測試 81

3.12 類Phaser的awaitAdvanceInterruptibly(int)方法測試1 83

3.13 類Phaser的awaitAdvanceInterruptibly(int)方法測試2 84

3.14 類Phaser的awaitAdvanceInterruptibly(int)方法測試3 86

3.15 類Phaser的awaitAdvanceInterruptibly(int,long,TimeUnit)方法測試4 87

3.16 類Phaser的forceTermination()和isTerminated()方法測試 89

3.17 控制Phaser類的運行時機 92

3.18 本章總結 93

第4章 Executor與ThreadPoolExecutor的使用 94

4.1 Executor接口介紹 94

4.2 使用Executors工廠類創建線程池 97

4.2.1 使用newCachedThreadPool()方法創建無界線程池 98

4.2.2 驗證newCachedThreadPool()創建為Thread池 100

4.2.3 使用newCachedThreadPool (ThreadFactory)定制線程工廠 102

4.2.4 使用newFixedThreadPool(int)方法創建有界線程池 103

4.2.5 使用newFixedThreadPool(int, ThreadFactory)定制線程工廠 105

4.2.6 使用newSingleThreadExecutor()方法創建單一線程池 106

4.2.7 使用newSingleThreadExecutor(ThreadFactory)定制線程工廠 107

4.3 ThreadPoolExecutor的使用 107

4.3.1 構造方法的測試 107

4.3.2 方法shutdown()和shutdownNow()與返回值 119

4.3.3 方法isShutdown() 129

4.3.4 方法isTerminating ()和isTerminated () 129

4.3.5 方法awaitTermination(long timeout,TimeUnit unit) 131

4.3.6 工廠ThreadFactory+execute()+UncaughtExceptionHandler處理異常 134

4.3.7 方法set/getRejectedExecutionHandler() 138

4.3.8 方法allowsCoreThreadTimeOut()/(boolean) 140

4.3.9 方法prestartCoreThread()和prestartAllCoreThreads() 142

4.3.10 方法getCompletedTaskCount() 144

4.3.11 常見3種隊列結合max值的因果效果 145

4.3.12 線程池ThreadPoolExecutor的拒絕策略 151

4.3.13 方法afterExecute()和beforeExecute() 157

4.3.14 方法remove(Runnable)的使用 159

4.3.15 多個get方法的測試 162

4.3.16 線程池ThreadPoolExecutor與Runnable執行為亂序特性 166

4.4 本章總結 167

第5章 Future和Callable的使用 168

5.1 Future和Callable的介紹 168

5.2 方法get()結合ExecutorService中的submit(Callable)的使用 168

5.3 方法get()結合ExecutorService中的submit(Runnable)和isDone()的使用 170

5.4 使用ExecutorService接口中的方法submit(Runnable, T result) 170

5.5 方法cancel(boolean mayInterruptIfRunning)和isCancelled()的使用 173

5.6 方法get(long timeout, TimeUnit unit)的使用 178

5.7 異常的處理 179

5.8 自定義拒絕策略RejectedExecutionHandler接口的使用 181

5.9 方法execute()與submit()的區別 182

5.10 驗證Future的缺點 186

5.11 本章總結 188

第6章 CompletionService的使用 189

6.1 CompletionService介紹 189

6.2 使用CompletionService解決Future的缺點 190

6.3 使用take()方法 193

6.4 使用poll()方法 194

6.5 使用poll(long timeout, TimeUnit unit)方法 195

6.6 類CompletionService與異常 199

6.7 方法Future submit(Runnable task, V result)的測試 205

6.8 本章總結 207

第7章 接口ExecutorService的方法使用 208

7.1 在ThreadPoolExecutor中使用ExecutorService中的方法 208

7.2 方法invokeAny(Collection tasks)的使用與interrupt 209

7.3 方法invokeAny()與執行慢的任務異常 212

7.4 方法invokeAny()與執行快的任務異常 216

7.5 方法invokeAny()與全部異常 220

7.6 方法invokeAny(CollectionTasks, timeout, timeUnit)超時的測試 222

7.7 方法invokeAll(Collection tasks)全正確 226

7.8 方法invokeAll(Collection tasks)快的正確慢的異常 227

7.9 方法invokeAll(Collection tasks)快的異常慢的正確 230

7.10 方法invokeAll(Collection tasks,long timeout,TimeUnit unit)先慢后快 232

7.11 方法invokeAll(Collection tasks,long timeout,TimeUnit unit)先快后慢 234

7.12 方法invokeAll(Collection tasks,long timeout,TimeUnit unit)全慢 236

7.13 本章總結 238

第8章 計劃任務ScheduledExecutorService的使用 239

8.1 ScheduledExecutorService的使用 240

8.2 ScheduledThreadPoolExecutor使用Callable延遲運行 241

8.3 ScheduledThreadPoolExecutor使用Runnable延遲運行 244

8.4 延遲運行并取得返回值 245

8.5 使用scheduleAtFixedRate()方法實現周期性執行 246

8.6 使用scheduleWithFixedDelay()方法實現周期性執行 248

8.7 使用getQueue()與remove()方法 250

8.8 方法setExecuteExistingDelayedTasksAfterShutdownPolicy()的使用 253

8.9 方法setContinueExistingPeriodicTasksAfterShutdownPolicy() 255

8.10 使用cancel(boolean)與setRemoveOnCancelPolicy()方法 257

8.11 本章總結 261

第9章 Fork-Join分治編程 262

9.1 Fork-Join分治編程與類結構 262

9.2 使用RecursiveAction讓任務跑起來 264

9.3 使用RecursiveAction分解任務 265

9.4 使用RecursiveTask取得返回值與join()和get()方法的區別 266

9.5 使用RecursiveTask執行多個任務并打印返回值 270

9.6 使用RecursiveTask實現字符串累加 272

9.7 使用Fork-Join實現求和:實驗1 273

9.8 使用Fork-Join實現求和:實驗2 275

9.9 類ForkJoinPool核心方法的實驗 276

9.9.1 方法public void execute(ForkJoinTask task)的使用 276

9.9.2 方法public void execute(Runnable task)的使用 278

9.9.3 方法public void execute(ForkJoinTask task)如何處理返回值 278

9.9.4 方法public ForkJoinTask submit(ForkJoinTask task)的使用 279

9.9.5 方法public ForkJoinTask submit(Runnable task)的使用 280

9.9.6 方法public ForkJoinTask submit(Callable task)的使用 281

9.9.7 方法public ForkJoinTask submit(Runnable task, T result)的使用 282

9.9.8 方法public List> invokeAll(Collection> tasks)的使用 285

9.9.9 方法public void shutdown()的使用 286

9.9.10 方法public List shutdownNow()的使用 289

9.9.11 方法isTerminating()和isTerminated()的使用 292

9.9.12 方法public boolean isShutdown()的使用 295

9.9.13 方法public boolean awaitTermination(long timeout, TimeUnit unit)的使用 297

9.9.14 方法public T invoke(ForkJoinTask task)的使用 299

9.9.15 監視pool池的狀態 301

9.10 類ForkJoinTask對異常的處理 308

9.11 本章總結 309

第10章 并發集合框架 310

10.1 集合框架結構簡要 310

10.1.1 接口Iterable 310

10.1.2 接口Collection 311

10.1.3 接口List 311

10.1.4 接口Set 312

10.1.5 接口Queue 312

10.1.6 接口Deque 312

10.2 非阻塞隊列 313

10.2.1 類ConcurrentHashMap的使用 313

10.2.2 類ConcurrentSkipListMap的使用 322

10.2.3 類ConcurrentSkipListSet的使用 325

10.2.4 類ConcurrentLinkedQueue的使用 328

10.2.5 類ConcurrentLinkedDeque的使用 330

10.2.6 類CopyOnWriteArrayList的使用 332

10.2.7 類CopyOnWriteArraySet的使用 335

10.3 阻塞隊列 337

10.3.1 類ArrayBlockingQueue的使用 337

10.3.2 類PriorityBlockingQueue的使用 338

10.3.3 類LinkedBlockingQueue的使用 340

10.3.4 類LinkedBlockingDeque的使用 341

10.3.5 類SynchronousQueue的使用 341

10.3.6 類DelayQueue的使用 344

10.3.7 類LinkedTransferQueue的使用 345

10.4 本章總結 354
Java并發編程無處不在,服務器、數據庫、應用,Java并發是永遠不可跳過的溝坎,優秀的程序員一定要在Java并發領域進行煉獄式的學習,吸收消化并最終轉化成軟件產品成果。另外,單純從Java程序員成長計劃這方面進行考慮,Java多線程/并發也依然是想深入學習Java必須要掌握的技術,比如在軟件公司中接觸的“緩存”,“分布式一致性”,“高并發框架”,“海量數據處理”,“高效訂單處理”等都與Java多線程、Java并發緊密相關。進行大數據、分布式、高并發類的專題攻克時,并發編程的學習必不可少,但并發編程學習曲線陡峭,多彎路和“坑”。本書基本完全覆蓋了Java并發包中核心類、API與并發框架,最大程度介紹了每個常用類的使用,以案例的方式進行講解,以使讀者快速學習,迅速掌握。

本書有以下特點
不留遺漏——全面覆蓋Java并發知識點;
直擊要害——實戰化案例,精準定位技術細節;
學以致用——精要式演示,確保開發/學習不脫節;
潛移默化——研磨式知識講解,參透技術要點;
提升效率——垂直式技術精解,不繞彎路;
循序提升——漸進式知識點統排,確保連貫。

技術暢銷書《Java多線程編程核心技術》作者撰寫,全程案例式講解,全面介紹Java并發包相關的技術。以淺白的措辭,結合大量實例模擬實際應用場景,全面解析Java并發包中的核心類、API與并發框架的使用。
全書共10章。第1章講解了線程間的同步性,以及線程間的傳輸數據控制,即Semaphore和Exchanger類的使用。第2章介紹了在同步處理上更加靈活的工具類CountDownLatch和CyclicBarrier,詳細到每個類的API的具體使用與應用場景。第3章是第2章的升級,由于CountDownLatch和CyclicBarrier類都有相應的弊端,所以在JDK 1.7中新增加了Phaser類來解決這些缺點,該類是熟練掌握JDK并發包的必要知識點。第4章是讀者應重點掌握的Executor接口與ThreadPoolExecutor線程池,能有效地提高程序運行效率,更好地統籌線程執行的相關任務。第5章講解Future和Callable的使用,解決線程需要返回值的情況。第6章介紹Java并發包中的CompletionService的使用,因為可以以異步的方式獲得任務執行的結果,所以該接口可以增強程序運行效率。第7章介紹接口ExecutorService,該接口提供了若干工具方法來方便執行并發業務。第8章主要介紹ScheduledExecutorService的使用,以掌握如何將計劃任務與線程池結合使用。第9章主要介紹Fork-Join分治編程,以提升多核CPU的優勢,加快程序運行效率。第10章主要介紹并發集合框架,利用好并發框架,事半功倍。
為什么要寫這本書

早在幾年前筆者就曾想過整理一份與Java并發包有關的稿件。因為市面上所有的Java書籍都是以1章或2章的篇幅介紹Java并發包技術,這就導致對Java并發包的講解并不是非常詳盡,包含的知識量遠遠不夠,并沒有完整覆蓋Java并發包技術的知識點。但可惜,苦于當時的時間及精力有限,一直沒有如愿。

也許是注定的安排,筆者現所在單位是集技術與教育為一體的軟件類企業,學員在學習完JavaSE/JavaEE之后想探索更深入的技術,比如大數據、分布式、高并發類的專題,就會立即遇到與Java并發包中API相關的問題。為了帶領學員在技術層面上有更高的追求,所以我將Java并發包的技術點以教案的方式進行整理,在課堂上與同學們一起進行學習、交流,同學們反響非常強烈。至此,若干年前的心愿終于了卻,同學們也很期待這樣一本書能出版發行,那樣他們就有真正的紙質參考資料了。若這份資料也被其他愛好Java并發的朋友們看到,并通過它學到相關知識,那就是我最大的榮幸了。

本書將給讀者一個完整的視角,秉承“大道至簡”的主導思想,只介紹Java并發包開發中最值得關注的內容,希望能拋磚引玉,以個人的一些想法和見解,為讀者拓展出更深入、全面的思路。

本書特色

本書盡量減少“啰嗦”式的文字語言,全部用Demo式案例來講解技術點的實現,使讀者看到代碼及運行結果后就可以知道此項目要解決的是什么問題。類似于網絡中Blog的風格,可讓讀者用最短的時間學會此知識點,明白此知識點如何應用,以及在使用時要避免什么。這就像“瑞士軍刀”,雖短小,卻鋒利。本書的目的就是幫讀者快速學習并解決問題。

讀者對象

Java初級、中級程序員

Java多線程開發者

Java并發開發者

系統架構師

大數據開發者

其他對多線程技術感興趣的人員

如何閱讀本書

在整理本書時,筆者本著實用、易懂的學習原則整理了10個章節來介紹Java并發包相關的技術。

第1章講解了Semaphore和Exchanger類的使用,學完本章后,能更好地控制線程間的同步性,以及線程間如何更好、更方便地傳輸數據。

第2章是第1章的延伸,主要講解了CountDownLatch、CyclicBarrier類的使用及在Java并發包中對并發訪問的控制。本章主要包括Semaphore、CountDownLatch和CyclicBarrier的使用,它們在使用上非常靈活,所以對于API的介紹比較詳細,為讀者學習控制同步打好堅實的基礎。

第3章是第2章的升級,由于CountDownLatch和CyclicBarrier類都有相應的弊端,所以在JDK1.7中新增加了Phaser類來解決這些缺點。

第4章中講解了Executor接口與ThreadPoolExecutor線程池的使用,可以說本章中的知識也是Java并發包中主要的應用技術點,線程池技術也在眾多的高并發業務環境中使用。掌握線程池能更有效地提高程序運行效率,更好地統籌線程執行的相關任務。

第5章中講解Future和Callable的使用,接口Runnable并不支持返回值,但在有些情況下真的需要返回值,所以Future就是用來解決這樣的問題的。

第6章介紹Java并發包中的CompletionService的使用,該接口可以增強程序運行效率,因為可以以異步的方式獲得任務執行的結果。

第7章主要介紹的是ExecutorService接口,該接口提供了若干方法來方便地執行業務,是比較常見的工具接口對象。

第8章主要介紹計劃任務ScheduledExecutorService的使用,學完本章可以掌握如何將計劃任務與線程池結合使用。

第9章主要介紹Fork-Join分治編程。分治編程在多核計算機中應用很廣,它可以將大的任務拆分成小的任務再執行,最后再把執行的結果聚合到一起,完全利用多核CPU的優勢,加快程序運行效率。

第10章主要介紹并發集合框架。Java中的集合在開發項目時占有舉足輕重的地位,在Java并發包中也提供了在高并發環境中使用的Java集合工具類,讀者需要著重掌握Queue接口的使用。

勘誤和支持

由于筆者的水平有限,加之編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。筆者郵箱是279377921@qq.com,期待能夠得到你們的真摯反饋,在技術之路上互勉共進。

本書的源代碼可以在華章網站(www.hzbook.com)下載。

致謝

感謝所在單位領導的支持與厚愛,使我在技術道路上更有信心。

感謝機械工業出版社華章公司的編輯們始終支持我的寫作,是你們的鼓勵和幫助引導我順利完成全部書稿。



高洪巖
pagetop