《Java多线程设计模式》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(日)结城浩著;博硕文化译
  • 出 版 社:北京:中国铁道出版社
  • 出版年份:2005
  • ISBN:7113064027
  • 页数:493 页
图书介绍:本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式理念,并且通过实际的Java程序范例和UML图示来解说书中在程序代码的重要部分,加上标注使读者更加容易解读。再配合众多的说明图解,无论对于初学者还是程序设计高手来说,这是学习和认识设计模式的一本优秀的参考书。

漫谈UML 1

UML 2

类图 2

类和层次结构的关系 2

接口与实现 3

聚合 4

访问控制 5

类间的关联性 5

顺序图 6

处理流程和对象间的协调 6

时序图 7

Introduction 1 Java语言的线程 9

Java语言的线程 10

何谓线程 10

明为追踪处理流程,实则追踪线程 10

单线程程序 11

多线程程序 12

Thread类的run方法和start方法 13

线程的启动 17

线程的启动(1)——利用Thread类的子类 17

线程的启动(2)——利用Runnable接口 19

线程的暂时停止 21

线程的共享互斥 22

synchronized方法 23

synchronized阻挡 27

线程的协调 28

wait set——线程的休息室 29

wait方法——把线程放入wait set 29

notify方法——从wait set拿出线程 31

notifyAll方法——从wait set拿出所有线程 33

wait、notify、notifyAll是Object类的方法 34

线程的状态移转 35

跟线程有关的其他话题 36

重点回顾 36

练习问题 37

Introduction 2 多线程程序的评量标准 41

多线程程序的评量标准 42

安全性——不损坏对象 42

生存性——进行必要的处理 42

复用性——可再利用类 43

性能——能快速、大量进行处理 43

评量标准的总结 44

重点回顾 44

练习问题 44

第1章 Single Threaded Execution——能通过这座桥的,只有一个人 47

Single Threaded Execution Pattern 48

范例程序1:不使用Single Threaded Execution Pattern的范例 48

并非线程安全(thread-safe)的Gate类 49

Main类 49

UserThread类 51

执行看看……果然出错了 51

为什么会出错呢 53

范例程序2:使用Single Threaded Execution Pattern的范例 54

线程安全的Gate类 55

synchronized所扮演的角色 55

Single Threaded Execution Patttern的所有参与者 57

扩展思考方向的提示 58

何时使用(适用性) 58

生命性与死锁 59

临界区的大小与执行性能 60

可重用性与继承异常 60

相关Pattern 61

Guarded Suspension Pattern(第3章) 61

Read-Write Lock Pattern(第6章) 61

Immutable Pattern(第2章) 61

Thread-Specific Storage Pattern(第11章) 62

进阶说明:关于synchronized 62

synchronized语法与Before/AfterPattern 62

这个synchronized在保护什么 64

该以什么单位来保护呢 64

原子的操作 65

long与double并不是原子的 65

获取谁的锁定来保护的呢 65

重点回顾 67

练习问题 67

第2章 Immutable——想破坏它也没办法 75

Immutable Pattern 76

范例程序 76

使用Immutable Pattern的Person类 76

Main类 77

PrintPersonThread类 78

Immutable Pattern的所有参与者 80

何时使用(适用性) 81

思考成对的mutable类与immutable类[执行性能] 81

扩展思考方向的提示 81

为了保护类的不变性[复用性] 82

标准类链接库里使用到的Immutable Pattern 83

相关Pattern 84

Single Threaded Execution Pattern(第1章) 84

Read-Write Lock Pattern(第6章) 84

Flyweight Pattern(参考附录E[GoF][Yuki01]) 84

进阶说明:final 85

重点回顾 86

练习问题 86

第3章 Guarded Suspension——要等到我准备好喔 93

Guarded Suspension Pattern 94

范例程序 94

Request类 95

RequestQueue类 96

ClientThread类 97

ServerThread类 98

Main类 99

java.util.LinkedList类的操作 100

仔细分析getRequest方法 100

仔细分析putRequest方法 102

synchronized的意义 102

wait与锁定 103

Guarded SuspensionPattern的所有参与者 103

多线程版的if 104

有条件的synchronized 104

扩展思考方向的提示 104

忘记更改状态与生命性 105

wait与notify/notifyAll的责任[复用性] 105

各种各样的称呼 105

相关Pattern 107

Single Threaded Execution Pattern(第1章) 107

Balking Pattern(第4章) 107

Producer-Consumer Pattern(第5章) 107

Future Pattern(第9章) 107

重点回顾 107

练习问题 108

第4章 Balking——不需要的话,就算了吧 115

范例程序 116

Balking Pattern 116

Data类 117

SaverThread类 119

ChangerThread类 119

Main类 120

Balking Pattern的所有参与者 122

扩展思考方向的提示 123

何时使用(适用性) 123

表达balk结果的方式 124

进阶说明:timeout 125

wait的结束是什么时候 125

Balking Pattern与Guarded Suspension Pattern的中间 125

Guarded Suspension Pattern(第3章) 125

Observer Pattern(参考附录E[GoF][Yuki01]) 125

相关Pattern 125

guarded timed的实现 126

synchronized没有timeout,也不能中断 129

重点回顾 129

练习问题 130

第5章 Producer-Consumer——我来做,你来用 135

Producer-Consumer Pattern 136

范例程序 136

MakerThread类 137

Main类 137

EaterThread类 138

Table类 139

分析put方法 141

分析take方法 142

Producer-ConsumerPattern的所有参与者 144

扩展思考方向的提示 145

保护安全性的Channel参与者[复用性] 145

不能直接传递吗 145

Channel参与者负荷派生的问题 146

要以什么顺序传递Data参与者 146

[中间者的存在]隐含的意义 147

只有一个Consumer参与者时会如何 148

相关Pattern 148

Mediator Pattern(参考附录E[GoF][Yuki01]) 148

Worker Thread Pattern(第8章) 149

CommandPattern(参考附录E[GoF][Yuki01]) 149

Strategy Pattern(参考附录E[GoF][Yuki01]) 149

进阶说明:InterruptedException异常 149

可能会花一些时间,但是可以取消掉 149

后面接着throws InterruptedException的方法 149

sleep方法与interrupt方法 150

join方法与interrupt方法 151

interrupt方法只是改变中断状态而已 151

wait方法与interrupt方法 151

isInterrupted方法——检查中断状态 152

Thread.interrupted方法——检查并清除中断状态 153

Thread类的stop方法不能使用 153

重点回顾 153

练习问题 154

第6章 Read-Write Lock——大家想看就看吧,不过看的时候不能写喔 159

Read-Write Lock Pattern 160

范例程序 160

Main类 161

Data类 161

WriterThread类 164

ReaderThread类 165

ReadWriteLock类 166

执行结果 169

检验警戒条件 170

Read-Write Lock Pattern的所有参与者 171

扩展思考方向的提示 172

利用同时“读取”不会冲突的特性,提高程序的性能 172

适合读取操作繁重时 172

适合读取比写入次数频繁时 173

锁定的意义 173

相关Pattern 173

Immutable Pattern(第2章)。 173

重点回顾 174

Strategized Locking Pattern(参考附录E[POSA2]) 174

Single Threaded Execution Pattern(第1章) 174

Guarded Suspension Pattern(第3章) 174

Before/After Pattern(参考附录E[Lea]) 174

练习问题 175

第7章 Thread-Per-Message——这个工作交给你了 181

Thread-Per-Message Pattern 182

范例程序 182

Main类 183

Host类 183

Helper类 184

Thread-Per-Message Pattern的所有参与者 187

提升响应性,降低延迟时间 188

扩展思考方向的提示 188

适合在操作顺序无所谓时使用 189

不需要返回值的时候 189

应用在服务器的制作 189

调用方法+启动线程→传送消息 189

相关Pattern 190

Future Pattern(第9章) 190

Worker Thread Pattern(第8章) 190

进阶说明:进程与线程 190

重点回顾 191

练习问题 192

第8章 Worker Thread——等到工作来,来了就工作 199

范例程序 200

Worker Thread Pattern 200

Main类 202

ClientThread类 202

Request类 203

Channel类 204

WorkerThread类 205

Worker Thread Pattern的所有参与者 207

启动线程是繁重的操作 209

控制承载量 209

扩展思考方向的提示 209

invocation与execution的分离 210

Runnable接口的意义 211

多态的Request参与者 211

只有一条Worker参与者 212

相关Pattern 213

Producer-ConsumerPattern(第5章) 213

Thread-Per-Message Pattern(第7章) 213

Command Pattern(参考附录E[GoF][Yuki01]) 213

Future Pattern(第9章) 213

Flyweight Pattern(参考附录E[GoF][Yuki01]) 213

何谓Event-Dispatching Thread 214

进阶说明:Swing的Event-Dispatching Thread 214

Thread-Specific Storage Pattern(第11章) 214

Active Object Pattern(第12章) 214

Event-dispatching thread只有一条 215

Event-dispatching thread会调用Listener 215

注册Listener的意义 217

Event-dispatching thread也处理画面的重绘 217

javax.swing.SwingUtilities类 217

Swing的单线程规则 218

重点回顾 219

练习问题 219

第9章 Future——先给您这张提货单 225

范例程序 226

Future Pattern 226

Main类 228

Host类 229

Data接口 231

FutureData类 231

RealData类 232

Future Pattern的所有参与者 234

扩展思考方向的提示 236

能够提升throughput吗 236

异步方法调用的“返回值” 236

变形——会改变的Future参与者 237

变形——不让人等待的Future参与者 237

分离“准备返回值”与“使用返回值” 237

谁需要考虑到多线程[复用性] 238

回调与Future Pattern 238

相关Pattern 239

Thread-Per-Message Pattern(第7章) 239

Builder Pattern(参考附录E[GoF][Yuki01]) 239

Proxy Pattern(参考附录E[GoF][Yuki01]) 239

Guarded Suspension Pattern(第3章) 239

重点回顾 239

练习问题 240

第10章 Two-Phase Termination——快把玩具收拾好,去睡觉吧 247

Two-Phase Termination Pattern 248

范例程序 249

CountupThread类 250

Main类 252

Two-Phase Termination Pattern的所有参与者 254

扩展思考方向的提示 255

不可以使用Thread类的stop方法 255

只检查标识是不够周全的 256

只测试中断状态也是不够的 256

进行繁重的处理前,先检查终止请求 257

join方法与isAlive方法 257

程序的结束与addShutdownHook方法 257

Multiphase Cancellation Pattern(参考附录E[Lea]) 259

Before/After Pattern(参考附录E[Lea]) 259

优雅终止的线程 259

相关Pattern 259

Multi-Phase StartupPattern 260

Balking Pattern(第4章) 260

进阶说明:中断状态与InterruptedException异常的相互转换 260

中断状态→InterruptedException异常的转换 260

InterruptedException异常→转换为中断状态 261

InterruptedException异常→转换为InterruptedException异常 262

重点回顾 262

练习问题 263

第11章 Thread-Specific Storage——每个线程的保管箱 273

java.lang.ThreadLocal是保管箱间 274

Thread-Specific StoragePattern 274

关于java.lang.ThreadLocal类 274

范例程序1:没有使用Thread-Specific Storage Pattern的范例 275

Log类 276

Main类 277

范例程序2:使用Thread-Specific Storage Pattern的范例 278

线程特有的TSLog类 278

Log类 280

ClientThread类 281

Main类 282

Thread-Specific Storage Pattern的所有参与者 283

局部变量与java.lang.ThreadLocal类 286

扩展思考方向的提示 286

放置线程特有信息的地方 287

不必担心被其他线程访问 288

throughput的提升取决于实现 288

隐藏context的危险性 289

相关Pattern 289

Singleton Pattern(参考附录E[GoF][Yuki01]) 289

WorkerThread Pattern(第8章) 290

Single Threaded Execution Pattern(第1章) 290

Proxy Pattern(参考附录E[GoF][Yuki01]) 290

进阶说明:Actor-based与Task-based 290

主体与客体 290

Task-based的思维 291

Actor-based的思维 291

实际上两个开发方式是混用的 292

重点回顾 292

练习问题 293

第12章 Active Object——接受异步消息的主动对象 295

Active Object Pattern 296

范例程序 296

使用端:Main类 298

使用端:MakerClientThread类 299

使用端:DisplayClientThread类 300

“主动对象”端:ActiveObject接口 300

“主动对象”端:ActiveObjectFactory类 301

“主动对象”端:Proxy类 302

“主动对象”端:SchedulerThread类 303

“主动对象”端:ActivationQueue类 304

“主动对象”端:MethodRequest类 305

“主动对象”端:MakeStringRequest类 306

“主动对象”端:DisplayStringRequest类 307

“主动对象”端:Result类 307

“主动对象”端:FutureResult类 308

“主动对象”端:RealResult类 309

“主动对象”端:Servant类 309

执行范例程序 310

Active ObjectPattern的所有参与者 311

扩展思考方向的提示 314

到底做了什么事呢 314

Pattern是否适合使用要考虑问题的规模 316

注意并发性 317

新增方法 317

Scheduler参与者的角色 318

“主动对象”之间的对话 318

迈向分布处理——将线程的界限移到机器的界限 318

重点回顾 319

Thread-Specific Storage Pattern(第11章) 319

Worker Thread Pattern(第8章) 319

Future Pattern(第9章) 319

Producer-Consumer Pattern(第5章) 319

相关Pattern 319

练习问题 320

总结 多线程程序设计的模式语言 325

多线程程序设计的模式语言 326

Pattern与Pattern Language 326

Single Threaded Execution Pattern(第1章)——能通过这座桥的,只有一个人 327

Immutable Pattern(第2章)——想破坏它也没办法 328

Guarded Suspension Pattern(第3章)——等到我准备好 329

Balking Pattern(第4章)——不需要的话,就算了吧 330

Producer-Consumer Pattern(第5章)——你来做,我来用 331

Read-Write Lock Pattern(第6章)——大家想看就看吧,不过看的时候不能写喔 332

Thread-Per-Message Pattern(第7章)——这个工作交给你了 334

Worker Thread Pattern(第8章)——等到工作来,来了就工作 334

Future Pattern(第9章)——先给您这张提货单 335

Two-Phase Termination Pattern(第10章)——快把玩具收拾好,去睡觉吧 336

Thread-Specific Storage Pattern(第11章)——每个线程的保管箱 337

Active Object Pattern(第12章)——接受异步消息的主动对象 339

尾声 340

附录A 练习问题的解答 341

附录B Java的内存模型 461

附录C Java线程的优先级 475

附录D 线程相关的主要API 479

附录E 参考文献 487