目錄
前言 ............................................................................................ XVII
1 簡介 ........................................................................................................... 1
並發程式設計 .......................................................................................................... 1
傳統並發編程技術概述 ............................................................................. 2
現代並發範式 .......................................................................................................... 3
Scala 的優點 ....................................................................... 4
預備知識 ....................................................................................... 5
執行Scala 程式 ......................................................................... 5
Scala 基礎知識 ................................................................................................ 6
小結 ...................................................................................................... 11
練習 ........................................................................................ 11
2 JVM 和Java 記憶體模型中的並發處理方式 ................................................ 13
進程和執行緒 ...................................................................... 14
創建和啟動執行緒 ....................................................16
原子執行方式 .......................................................21
調整次序 ..................................................................................................25
監控器和同步 ............................................................................................... 27
死鎖 .....................................................................................................29
保衛鎖 ..........................................................................................................32
中斷執行緒和正常關閉 ...............................................................................................36
Volatile 變數 .................................................................................................. 37
Java 記憶體模型.............................................................................................. 39
不可變對象和final 欄位 .......................................................41
小結 ............................................................. 43
練習 ....................................................................................... 43
3 構建並發程式的傳統材料 ............................................. 47
Executor 和ExecutionContext 對象 ................... 48
原子型基元 ...................................................... 52
原子變數 ............................................................................52
無鎖編程 ..........................................................55
以明確方式實現鎖 ...................................................................57
ABA 問題 .....................................................................59
惰性值 .............................................................................. 61
並發集合 ..................................................................... 66
並發佇列 ...............................................................................68
並發集和映射 .....................................................71
並發遍歷 .............................................................77
創建和處理進程 ...................................................... 79
小結 ................................................................. 81
練習 ................................................................... 81
4 使用Future 和Promise 對象編寫異步程式 .............................................. 85
Future 類 ................................................................................. 86
執行Future 計算....................................................................88
Future 對象的回調函式 ..................................................89
Future 計算和異常 ...............................................92
使用Try 類型 .......................................93
致命異常 ............................................95
Future 對象中的函式組合 ............................................................95
Promise 類 .................................................. 103
轉換基於回調函式的API ........................................................... 106
擴展Future API .................................................. 108
取消異步計算操作 ..................................................................................... 109
Future 對象和阻塞操作 ................................................................... 112
等待Future 對象..................................................................................... 112
在異步計算內部執行阻塞操作 ................................................................................... 113
Scala Async 庫 ...................................................................... 114
可選的Future 框架 .......................................................................................... 117
小結 ........................................................................................................... 118
練習 ....................................................................................................................... 119
5 數據並行集合 ......................................................................................... 121
Scala 集合概述 ................................................................................................ 122
並行集合的用法 ......................................................................................... 123
並行集合類的層次結構 ....................................................................................... 126
配置並行等級 ...................................................................................................... 128
在JVM 中度量性能 ............................................................................. 129
使用並行集合的注意事項 ................................................................................. 131
非可並行化集合 .................................................................... 131
非可並行化操作 .............................................................................................. 132
並行操作的副作用 .................................................................................................... 134
不確定的並行操作 .................................. 135
可交換和可結合操作符 .............................................................. 137
組合使用並行集合和並發集合 .................................................................... 139
弱一致性疊代器 ........................................................ 140
實現自定義的並行集合 ............................................................................... 141
分離器 ................................................................................................ 142
組合器 ..................................................................................................... 145
可選的數據並行框架 ................................................................. 148
ScalaBlitz 框架中的集合層次結構 .............................................................. 149
小結 ....................................................................................................... 150
練習 ............................................................................................. 151
6 使用Reactive Extensions 編寫並發程式 ............................................... 153
創建Observable 對象 ............................................................... 154
Observable 對象和異常 ................................................................ 157
Observable 協定 ................................................................................ 158
實現自定義Observable 對象 ...................................................................................... 160
通過Future 對象創建Observable 對象 ............................................................ 161
Subscription 對象 ............................................................................................ 162
組合Observable 對象 ...................................................................................... 165
嵌套的Observable 對象 ....................................................................................... 166
處理完善Observable 對象失敗的情況 .................................................................. 171
Rx 調度器 ............................................................................... 174
使用自定義調度器編寫UI 應用程式 .................................................................. 176
Subject 特徵和自頂向下的回響式編程 .................................................. 181
小結 ............................................................................................ 186
練習 ..................................................................................... 186
7 基於軟體的事務記憶體 .............................................................................. 189
原子變數帶來的麻煩 ...................................................................... 190
使用基於軟體的事務記憶體 .............................................. 194
事務引用 ......................................................... 196
使用atomic 語句 ................................................................ 197
組合事務 .............................................................. 198
事務與副作用 ................................................................. 199
單操作事務 ................................................................. 203
嵌套事務 ........................................................... 205
事務和異常 ...................................................... 208
重新嘗試執行事務 ........................................ 212
通過逾時設定重新嘗試執行事務 ......................................... 216
事務集合 ..................................................................................... 217
事務局部變數 ................................................................. 218
事務數組 ......................................................... 219
事務映射 .............................................................................. 221
小結 ............................................................................................. 222
練習 ............................................................................. 223
8 Actor ...................................................................................................... 227
使用Actor 模型 ............................................................................... 228
創建Actor 系統和Actor 實例 ..................................................................... 230
管理無法正常處理的訊息 .................................................................................. 233
Actor 實例的行為和狀態 ........................................................................................ 234
Akka 框架中的Actor 層次結構.................................................................................. 239
識別Actor 對象 ............................................................................................... 242
Actor 對象的生命周期 ................................................................................... 245
Actor 對象之間的通信 ...................................................... 249
請求模式 ........................................................ 251
轉發模式 ..................................................................... 254
停止Actor 對象 ......................................................................... 255
Actor 監督 .......................................................................... 257
遠程Actor 對象 ............................................................. 263
小結 .............................................................................................. 266
練習 ................................................................................................... 267
9 實用並發技術 ......................................................................................... 269
工欲善其事,必先利其器 ....................................................... 269
組合使用多種框架——編寫遠程檔案管理器 ............................................ 273
創建檔案系統模型 ........................................................ 274
伺服器接口 ......................................................................... 278
客戶端導航API.................................................................................. 280
客戶端的用戶界面 ............................................................................. 284
實現客戶端程式的邏輯 .................................................................................. 288
改進遠程檔案管理器 ........................................................................................ 293
調試並發程式 ................................................................................................................... 294
死鎖和暫停處理過程 ............................................................... 295
調試運行結果不正確的程式 ................................................................ 299
性能調試 ............................................................................... 304
小結 .............................................................................................................................. 310
練習 .................................................................................................................................. 311