360book 首页 > 行业图书 > 计算机与网络 > 正文 打印 下载 

图灵程序设计丛书 图解Java多线程设计模式  下载

360book.com  2022-04-27 00:00:00  下载

图灵程序设计丛书 图解Java多线程设计模式
作者:结城浩 著;侯振龙,杨文轩 译
出版时间:2017
丛编项: 图灵程序设计丛书
内容简介
  本书通过具体的Java 程序,以浅显易懂的语言逐一说明了多线程和并发处理中常用的12 种设计模式。内容涉及线程的基础知识、线程的启动与终止、线程间的互斥处理与协作、线程的有效应用、线程的数量管理以及性能优化的注意事项等。此外,还介绍了一些多线程编程时容易出现的失误,以及多线程程序的阅读技巧等。在讲解过程中,不仅以图配文,理论结合实例,而且提供了运用模式解决具体问题的练习题和答案,帮助读者加深对多线程和并发处理的理解,并掌握其使用技巧。
目录
序章1/tJava线程/t1
I1.1/tJava线程/t2
I1.2/t何谓线程/t2
明为跟踪处理流程,实为跟踪线程/t2
单线程程序/t3
多线程程序/t4
Thread类的run方法和start方法/t5
I1.3/t线程的启动/t9
线程的启动(1)——利用Thread类的子类/t9
线程的启动(2)——利用Runnable接口/t10
I1.4/t线程的暂停/t12
I1.5/t线程的互斥处理/t13
synchronized方法/t14
synchronized代码块/t17
I1.6/t线程的协作/t18
等待队列——线程休息室/t19
wait方法——将线程放入等待队列/t19
notify方法——从等待队列中取出线程/t21
notifyAll方法——从等待队列中取出所有线程/t23
wait、notify、notifyAll是Object类的方法/t24
I1.7/t线程的状态迁移/t24
I1.8/t线程相关的其他话题/t26
I1.9/t本章所学知识/t26
I1.10/t练习题/t26
序章2/t多线程程序的评价标准/t31
I2.1/t多线程程序的评价标准/t32
安全性——不损坏对象/t32
生存性——必要的处理能够被执行/t32
可复用性——类可重复利用/t33
性能——能快速、大批量地执行处理/t33
评价标准总结/t33
I2.2/t本章所学知识/t34
I2.3/t练习题/t34
第1章/tSingle Threaded Execution模式——能通过这座桥的只有一个人/t35
1.1/tSingle Threaded Execution模式/t36
1.2/t示例程序1:不使用Single Threaded Execution模式的程序/t36
Main类/t37
非线程安全的Gate类/t37
UserThread类/t38
执行起来看看……出错了/t39
为什么会出错呢/t40
1.3/t示例程序2:使用Single Threaded Execution模式的程序/t41
线程安全的Gate类/t41
synchronized的作用/t42
1.4/tSingle Threaded Execution模式中的登场角色/t43
1.5/t拓展思路的要点/t44
何时使用(可使用Single Threaded Execution模式的情况)/t44
生存性与死锁/t45
可复用性和继承反常/t46
临界区的大小和性能/t46
1.6/t相关的设计模式/t47
Guarded Suspension模式/t47
Read-Write Lock模式/t47
Immutable模式/t47
Thread-Specific Storage模式/t48
1.7/t延伸阅读1:关于synchronized/t48
synchronized语法与Before/After模式/t48
synchronized在保护着什么/t49
该以什么单位来保护呢/t50
使用哪个锁保护/t50
原子操作/t51
long与double的操作不是原子的/t51
1.8/t延伸阅读2:java.util.concurrent包和计数信号量/t52
计数信号量和Semaphore类/t52
使用Semaphore类的示例程序/t52
1.9/t本章所学知识/t55
1.10/t练习题/t55
第2章/tImmutable模式——想破坏也破坏不了/t61
2.1/tImmutable模式/t62
2.2/t示例程序/t62
使用Immutable模式的Person类/t62
Main类/t63
PrintPersonThread类/t63
2.3/tImmutable模式中的登场角色/t65
2.4/t拓展思路的要点/t66
何时使用(可使用Immutable模式的情况)/t66
考虑成对的mutable类和immutable类 [性能]/t66
为了确保不可变性 [可复用性]/t67
标准类库中用到的Immutable模式/t67
2.5/t相关的设计模式/t69
Single Threaded Execution模式/t69
Read-Write Lock模式/t69
Flyweight模式/t69
2.6/t延伸阅读1:final/t69
final的含义/t69
2.7/t延伸阅读2:集合类与多线程/t71
示例1:非线程安全的java.util.ArrayList类/t71
示例2:利用Collections.synchronizedList方法所进行的同步/t74
示例3:使用copy-on-write的java.util.concurrent.CopyOnWriteArrayList类/t75
2.8/t本章所学知识/t76
2.9/t练习题/t77
第3章/tGuarded Suspension模式——等我准备好哦/t81
3.1/tGuarded Suspension模式/t82
3.2/t示例程序/t82
Request类/t83
RequestQueue类/t84
ClientThread类/t85
ServerThread类/t85
Main类/t86
java.util.Queue与java.util.LinkedList的操作/t87
getRequest详解/t87
putRequest详解/t89
synchronized的含义/t89
wait与锁/t89
3.3/tGuarded Suspension模式中的登场角色/t90
3.4/t拓展思路的要点/t91
附加条件的synchronized/t91
多线程版本的if/t91
忘记改变状态与生存性/t91
wait与notify/notifyAll的责任 [可复用性]/t91
各种称呼/t91
使用java.util.concurrent.LinkedBlockingQueue的示例程序/t93
3.5/t相关的设计模式/t94
Single Threaded Execution模式/t94
Balking模式/t94
Producer-Consumer模式/t94
Future模式/t94
3.6/t本章所学知识/t95
3.7/t练习题/t95
第4章/tBalking模式——不需要就算了/t99
4.1/tBalking模式/t100
4.2/t示例程序/t100
Data类/t100
SaverThread类/t102
ChangerThread类/t102
Main类/t103
4.3/tBalking模式中的登场角色/t105
4.4/t拓展思路的要点/t106
何时使用(可使用Balking模式的情况)/t106
balk结果的表示方式/t107
4.5/t相关的设计模式/t107
Guarded Suspension模式/t107
Observer模式/t107
4.6/t延伸阅读:超时/t108
Balking模式和Guarded Suspension模式之间/t108
wait何时终止呢/t108
guarded timed的实现(使用wait)/t109
synchronized中没有超时,也不能中断/t110
java.util.concurrent中的超时/t111
4.7 本章所学知识/t111
4.8 练习题/t112
第5章/tProducer-Consumer模式——我来做,你来用/t115
5.1/tProducer-Consumer模式/t116
5.2/t示例程序/t116
Main类/t116
MakerThread类/t117
EaterThread类/t118
Table类/t118
解读put方法/t120
解读take方法/t121
5.3/tProducer-Consumer模式中的登场角色/t122
5.4/t拓展思路的要点/t123
守护安全性的Channel角色(可复用性)/t123
不可以直接传递吗/t124
Channel角色的剩余空间所导致的问题/t124
以什么顺序传递Data角色呢/t125
“存在中间角色”的意义/t125
Consumer角色只有一个时会怎么样呢/t126
5.5/t相关的设计模式/t126
Mediator模式/t126
Worker Thread模式/t126
Command模式/t126
Strategy模式/t127
5.6/t延伸阅读1:理解InterruptedException异常/t127
可能会花费时间,但可以取消/t127
加了throws InterruptedException的方法/t127
sleep方法和interrupt方法/t128
wait方法和interrupt方法/t128
join方法和interrupt方法/t129
interrupt方法只是改变中断状态/t129
isInterrupted方法——检查中断状态/t130
Thread.interrupted方法——检查并清除中断状态/t130
不可以使用Thread类的stop方法/t130
5.7/t延伸阅读2:java.util.concurrent包和Producer-Consumer模式/t131
java.util.concurrent包中的队列/t131
使用java.util.concurrent.ArrayBlockingQueue的示例程序/t132
使用java.util.concurrent.Exchanger类交换缓冲区/t133
5.8/t本章所学知识/t136
5.9/t练习题/t137
第6章/tRead-Write Lock模式——大家一起读没问题,但读的时候不要写哦/t141
6.1/tRead-Write Lock模式/t142
6.2/t示例程序/t142
Main类/t143
Data类/t143
WriterThread类/t146
ReaderThread类/t146
ReadWriteLock类/t147
执行起来看看/t149
守护条件的确认/t150
6.3/tRead-Write Lock模式中的登场角色/t151
6.4/t拓展思路的要点/t153
利用“读取”操作的线程之间不会冲突的特性来提高程序性能/t153
适合读取操作繁重时/t153
适合读取频率比写入频率高时/t153
锁的含义/t153
6.5/t相关的设计模式/t154
Immutable模式/t154
Single Threaded Execution模式/t154
Guarded Suspension模式/t154
Before/After模式/t154
Strategized Locking模式/t154
6.6/t延伸阅读:java.util.concurrent.locks包和Read-Write Lock模式/t154
java.util.concurrent.locks包/t154
使用java.util.concurrent.locks的示例程序/t155
6.7/t本章所学知识/t156
6.8/t练习题/t157
第7章/tThread-Per-Message模式——这项工作就交给你了/t163
7.1/tThread-Per-Message模式/t164
7.2/t示例程序/t164
Main类/t164
Host类/t165
Helper类/t166
7.3/tThread-Per-Message模式中的登场角色/t168
7.4/t拓展思路的要点/t169
提高响应性,缩短延迟时间/t169
适用于操作顺序没有要求时/t169
适用于不需要返回值时/t169
应用于服务器/t169
调用方法+启动线程→发送消息/t170
7.5/t相关的设计模式/t170
Future模式/t170
Worker Thread模式/t170
7.6/t延伸阅读1:进程与线程/t171
7.7/t延伸阅读2:java.util.concurrent包和Thread-Per-Message模式/t171
java.lang.Thread类/t171
java.lang.Runnable接口/t172
java.util.concurrent.ThreadFactory接口/t173
java.util.concurrent.Executors类获取的ThreadFactory/t174
java.util.concurrent.Executor接口/t175
java.util.concurrent.ExecutorService接口/t176
java.util.concurrent.ScheduledExecutorService类/t177
总结/t178
7.8/t本章所学知识/t180
7.9/t练习题/t180
第8章/tWorker Thread模式——工作没来就一直等,工作来了就干活/t187
8.1/tWorker Thread模式/t188
8.2/t示例程序/t188
Main类/t189
ClientThread类/t190
Request类/t190
Channel类/t191
WorkerThread类/t192
8.3/tWorker Thread模式中的登场角色/t193
8.4/t拓展思路的要点/t195
提高吞吐量/t195
容量控制/t195
调用与执行的分离/t196
Runnable接口的意义/t197
多态的Request角色/t198
独自一人的Worker角色/t199
8.5/t相关的设计模式/t199
Producer-Consumer模式/t199
Thread-Per-Message模式/t199
Command模式/t199
Future模式/t199
Flyweight模式/t199
Thread-Specific Storage模式/t200
Active Ojbect模式/t200
8.6/t延伸阅读1:Swing事件分发线程/t200
什么是事件分发线程/t200
事件分发线程只有一个/t200
事件分发线程调用监听器/t201
注册监听器的意义/t201
事件分发线程也负责绘制界面/t201
javax.swing.SwingUtilities类/t202
Swing的单线程规则/t203
8.7/t延伸阅读2:java.util.concurrent包和Worker Thread模式/t204
ThreadPoolExecutor类/t204
通过java.util.concurrent包创建线程池/t205
8.8/t本章所学知识/t207
8.9/t练习题/t208
第9章/tFuture模式——先给您提货单/t211
9.1/tFuture模式/t212
9.2/t示例程序/t212
Main类/t214
Host类/t214
Data接口/t215
FutureData类/t216
RealData类/t217
9.3/tFuture模式中的登场角色/t218
9.4/t拓展思路的要点/t219
吞吐量会提高吗/t219
异步方法调用的“返回值”/t220
“准备返回值”和“使用返回值”的分离/t220
变种——不让主线程久等的Future角色/t220
变种——会发生变化的Future角色/t221
谁会在意多线程呢?“可复用性”/t221
回调与Future模式/t221
9.5/t相关的设计模式/t222
Thread-Per-Message模式/t222
Builder模式/t222
Proxy模式/t222
Guarded Suspension模式/t222
Balking模式/t222
9.6/t延伸阅读:java.util.concurrent包与Future模式/t222
java.util.concurrent包/t222
使用了java.util.concurrent包的示例程序/t223
9.7/t本章所学知识/t226
9.8/t练习题/t226
第10章/tTwo-Phase Termination模式——先收拾房间再睡觉/t231
10.1/tTwo-Phase Termination模式/t232
10.2/t示例程序/t233
CountupThread类/t234
Main类/t236
10.3/tTwo-Phase Termination模式中的登场角色/t237
10.4/t拓展思路的要点/t238
不能使用Thread类的stop方法/t238
仅仅检查标志是不够的/t239
仅仅检查中断状态是不够的/t239
在长时间处理前检查终止请求/t239
join方法和isAlive方法/t240
java.util.concurrent.ExecutorService接口与Two-Phase Termination模式/t240
要捕获程序整体的终止时/t241
优雅地终止线程/t243
10.5/t相关的设计模式/t243
Before/After模式/t243
Multiphase Cancellation模式/t243
Multi-Phase Startup模式/t244
Balking模式/t244
10.6/t延伸阅读1:中断状态与InterruptedException异常的相互转换/t244
中断状态→InterruptedException异常的转换/t244
InterruptedException异常→中断状态的转换/t245
InterruptedException异常→InterruptedException异常的转换/t245
10.7/t延伸阅读2:java.util.concurrent包与线程同步/t246
java.util.concurrent.CountDownLatch类/t246
java.util.concurrent.CyclicBarrier类/t249
10.8/t本章所学知识/t253
10.9/t练习题/t253
第11章/tThread-Specific Storage模式——一个线程一个储物柜/t263
11.1/tThread-Specific Storage模式/t264
11.2/t关于java.lang.ThreadLocal类/t264
java.lang.ThreadLocal就是储物间/t264
java.lang.ThreadLocal与泛型/t265
11.3/t示例程序1:不使用Thread-Specific Storage模式的示例/t265
Log类/t266
Main类/t266
11.4/t示例程序2:使用了Thread-Specific Storage模式的示例/t267
线程特有的TSLog类/t268
Log类/t269
ClientThread类/t270
Main类/t271
11.5/tThread-Specific Storage模式中的登场角色/t272
11.6/t拓展思路的要点/t274
局部变量与java.lang.ThreadLocal类/t274
保存线程特有的信息的位置/t275
不必担心其他线程访问/t275
吞吐量的提高很大程序上取决于实现方式/t276
上下文的危险性/t276
11.7/t相关的设计模式/t277
Singleton模式/t277
Worker Thread模式/t277
Single Threaded Execution模式/t277
Proxy模式/t277
11.8 延伸阅读:基于角色与基于任务/t277
主体与客体/t277
基于角色的考虑方式/t278
基于任务的考虑方式/t278
实际上两种方式是综合在一起的/t279
11.9/t本章所学知识/t279
11.10/t练习题/t280
第12章/tActive Object模式——接收异步消息的主动对象/t283
12.1/tActive Object模式/t284
12.2/t示例程序1/t284
调用方:Main类/t287
调用方:MakerClientThread类/t288
调用方:DisplayClientThread类/t289
主动对象方:ActiveObject接口/t289
主动对象方:ActiveObjectFactory类/t290
主动对象方:Proxy类/t290
主动对象方:SchedulerThread类/t291
主动对象方:ActivationQueue类/t292
主动对象方:MethodRequest类/t293
主动对象方:MakeStringRequest类/t294
主动对象方:DisplayStringRequest类/t295
主动对象方:Result类/t295
主动对象方:FutureResult类/t296
主动对象方:RealResult类/t296
主动对象方:Servant类/t297
示例程序1的运行/t297
12.3/tActiveObject模式中的登场角色/t298
12.4/t拓展思路的要点/t304
到底做了些什么事情/t304
运用模式时需要考虑问题的粒度/t304
关于并发性/t304
增加方法/t305
Scheduler角色的作用/t305
主动对象之间的交互/t306
通往分布式——从跨越线程界线变为跨越计算机界线/t306
12.5/t相关的设计模式/t306
Producer-Consumer模式/t306
Future模式/t307
Worker Thread模式/t307
Thread-Specific Storage模式/t307
12.6/t延伸阅读:java.util.concurrent包与Active Object模式/t307
类与接口/t307
调用方:Main类/t309
调用方:MakerClientThread类/t309
调用方:DisplayClientThread类/t310
主动对象方:ActiveObject接口/t311
主动对象方:ActiveObjectFactory类/t311
主动对象:ActiveObjectImpl类/t312
示例程序2的运行/t313
12.7/t本章所学知识/t314
12.8/t练习题/t315
第13章/t总结——多线程编程的模式语言/t321
13.1/t多线程编程的模式语言/t322
模式与模式语言/t322
13.2/tSingle Threaded Execution模式
/t——能通过这座桥的只有一个人/t323
13.3 Immutable模式
/t——想破坏也破坏不了/t324
13.4 Guarded Suspension模式
/t——等我准备好哦/t325
13.5 Balking模式
/t——不需要就算了/t326
13.6 Producer-Consumer模式
/t——我来做,你来用/t327
13.7 Read-Write Lock模式
/t——大家一起读没问题,但读的时候不要写哦/t328
13.8 Thread-Per-Message模式
/t——这项工作就交给你了/t329
13.9 Worker Thread模式
/t——工作没来就一直等,工作来了就干活/t330
13.10/tFuture模式
/t——先给您提货单/t330
13.11/tTwo-Phase Termination模式
/t——先收拾房间再睡觉/t331
13.12/tThread-Specific Storage模式
/t——一个线程一个储物柜/t332
13.13/tActive Object模式
/t——接收异步消息的主动对象/t333
13.14/t写在最后/t335
附录/t/t337
附录A 习题解答/t338
附录B Java内存模型/t447
附录C Java线程的优先级/t467
附录D 线程相关的主要API/t469
附录E java.util.concurrent包/t475
附录F 示例程序的运行步骤/t483
附录G 参考文献/t485





上一篇: 信息科学与技术丛书 Linux驱动程序开发实例 (第2版)
下一篇: JAVA程序员面试宝典 第4版 [欧立奇,朱梅,段韬 编著]

地址:http://www.360book.com/books/220/997350.html