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

图灵程序设计丛书:图解Java多线程设计模式9787115462749百度网盘pdf下载

作者:
简介:图灵程序设计丛书:图解Java多线程设计模式9787115462749
出版社:
出版时间:2017-08
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

基本信息

  • 商品名:M(满68包邮)图解Java多线程设计模式(图灵出品)9787115462749人民邮电(日)结城浩
  • ISBN:9787115462749
  • 定价:89
  • 出版社:人民邮电出版社
  • 作者:结城浩

参考信息(以实物为准)

  • 出版时间:2017-08-01
  • 印刷时间:
  • 版次:01
  • 印次:1
  • 包装:平装
  • 开本:16开
  • 用纸:
  • 页数:491
  • 字数:

编辑推荐

精选12种与多线程和并发处理相关的设计模式
264张图表 + 300段Java示例程序 = 轻松学习多线程编程
日本经典多线程入门书,原版长销11年!

1.图文并茂 通俗易懂
日本资-深技术作家、《程序员的数学》作者结城浩执笔,264张图表(UML类图、时序图、Timethreads图等)穿插文中,通过类比手法和浅显的语言,逐一讲解与多线程和并发处理相关的12种设计模式。每章附带练习题和答案,自学者也可轻松学习
2.专业实用 拓展进阶
编写了300个示例程序来实现设计模式,掌握这些设计模式可以避免程序发生死锁、节省资源、提高性能等,让多线程程序更高效。java.util.concurrent包、synchronized关键字、Swing框架、Java内存模型等内容也均有涉及,不仅能够了解Java多线程的相关知识,还可加深对Java语言的理解。

本书适合以下读者阅读
a.对多线程感兴趣的人
b.对Java编程感兴趣的人
c.对设计模式感兴趣的人
d.对面向对象开发感兴趣的人

内容简介

本书通过具体的Java 程序,以浅显易懂的语言逐一说明了多线程和并发处理中常用的12 种设计模式。内容涉及线程的基础知识、线程的启动与终止、线程间的互斥处理与协作、线程的有效应用、线程的数量管理以及性能优化的注意事项等。此外,还介绍了一些多线程编程时容易出现的失误,以及多线程程序的阅读技巧等。在讲解过程中,不仅以图配文,理论结合实例,而且提供了运用模式解决具体问题的练习题和答案,帮助读者加深对多线程和并发处理的理解,并掌握其使用技巧。

目录

序章1Java线程1
I1.1Java线程2
I1.2何谓线程2
明为跟踪处理流程,实为跟踪线程2
单线程程序3
多线程程序4
Thread类的run方法和start方法5
I1.3线程的启动9
线程的启动(1)——利用Thread类的子类9
线程的启动(2)——利用Runnable接口10
I1.4线程的暂停12
I1.5线程的互斥处理13
synchronized方法14
synchronized代码块17
I1.6线程的协作18
等待队列——线程休息室19
wait方法——将线程放入等待队列19
notify方法——从等待队列中取出线程21
notifyAll方法——从等待队列中取出所有线程23
wait、notify、notifyAll是Object类的方法24
I1.7线程的状态迁移24
I1.8线程相关的其他话题26
I1.9本章所学知识26
I1.10练习题26
序章2多线程程序的评价标准31
I2.1多线程程序的评价标准32
安全性——不损坏对象32
生存性——必要的处理能够被执行32
可复用性——类可重复利用33
性能——能快速、大批量地执行处理33
评价标准总结33
I2.2本章所学知识34
I2.3练习题34
□□章Single Threaded Execution模式——能通过这座桥的只有一个人35
1.1Single Threaded Execution模式36
1.2示例程序1:不使用Single Threaded Execution模式的程序36
Main类37
非线程安全的Gate类37
UserThread类38
执行起来看看……出错了39
为什么会出错呢40
1.3示例程序2:使用Single Threaded Execution模式的程序41
线程安全的Gate类41
synchronized的作用42
1.4Single Threaded Execution模式中的登场角色43
1.5拓展思路的要点44
何时使用(可使用Single Threaded Execution模式的情况)44
生存性与死锁45
可复用性和继承反常46
临界区的大小和性能46
1.6相关的设计模式47
Guarded Suspension模式47
Read-Write Lock模式47
Immutable模式47
Thread-Specific Storage模式48
1.7延伸阅读1:关于synchronized48
synchronized语法与Before/After模式48
synchronized在保护着什么49
该以什么单位来保护呢50
使用哪个锁保护50
原子操作51
long与double的操作不是原子的51
1.8延伸阅读2:java.util.concurrent包和计数信号量52
计数信号量和Semaphore类52
使用Semaphore类的示例程序52
1.9本章所学知识55
1.10练习题55
第2章Immutable模式——想破坏也破坏不了61
2.1Immutable模式62
2.2示例程序62
使用Immutable模式的Person类62
Main类63
PrintPersonThread类63
2.3Immutable模式中的登场角色65
2.4拓展思路的要点66
何时使用(可使用Immutable模式的情况)66
考虑成对的mutable类和immutable类 [性能]66
为了确保不可变性 [可复用性]67
标准类库中用到的Immutable模式67
2.5相关的设计模式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方法所进行的同步74
示例3:使用copy-on-write的java.util.concurrent.CopyOnWriteArrayList类75
2.8本章所学知识76
2.9练习题77
第3章Guarded Suspension模式——等我准备好哦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模式中的登场角色90
3.4拓展思路的要点91
附加条件的synchronized91
多线程版本的if91
忘记改变状态与生存性91
wait与notify/notifyAll的责任 [可复用性]91
各种称呼91
使用java.util.concurrent.LinkedBlockingQueue的示例程序93
3.5相关的设计模式94
Single Threaded Execution模式94
Balking模式94
Producer-Consumer模式94
Future模式94
3.6本章所学知识95
3.7练习题95
第4章Balking模式——不需要就算了99
4.1Balking模式100
4.2示例程序100
Data类100
SaverThread类102
ChangerThread类102
Main类103
4.3Balking模式中的登场角色105
4.4拓展思路的要点106
何时使用(可使用Balking模式的情况)106
balk结果的表示方式107
4.5相关的设计模式107
Guarded Suspension模式107
Observer模式107
4.6延伸阅读:超时108
Balking模式和Guarded Suspension模式之间108
wait何时终止呢108
guarded timed的实现(使用wait)109
synchronized中没有超时,也不能中断110
java.util.concurrent中的超时111
4.7 本章所学知识111
4.8 练习题112
第5章Producer-Consumer模式——我来做,你来用115
5.1Producer-Consumer模式116
5.2示例程序116
Main类116
MakerThread类117
EaterThread类118
Table类118
解读put方法120
解读take方法121
5.3Producer-Consumer模式中的登场角色122
5.4拓展思路的要点123
守护安全性的Channel角色(可复用性)123
不可以直接传递吗124
Channel角色的剩余空间所导致的问题124
以什么顺序传递Data角色呢125
“存在中间角色”的意义125
Consumer角色只有一个时会怎么样呢126
5.5相关的设计模式126
Mediator模式126
Worker Thread模式126
Command模式126
Strategy模式127
5.6延伸阅读1:理解InterruptedException异常127
可能会花费时间,但可以取消127
加了throws InterruptedException的方法127
sleep方法和interrupt方法128
wait方法和interrupt方法128
join方法和interrupt方法129
interrupt方法只是改变中断状态129
isInterrupted方法——检查中断状态130
Thread.interrupted方法——检查并清除中断状态130
不可以使用Thread类的stop方法130
5.7延伸阅读2:java.util.concurrent包和Producer-Consumer模式131
java.util.concurrent包中的队列131
使用java.util.concurrent.ArrayBlockingQueue的示例程序132
使用java.util.concurrent.Exchanger类交换缓冲区133
5.8本章所学知识136
5.9练习题137
第6章Read-Write Lock模式——大家一起读没问题,但读的时候不要写哦141
6.1Read-Write Lock模式142
6.2示例程序142
Main类143
Data类143
WriterThread类146
ReaderThread类146
ReadWriteLock类147
执行起来看看149
守护条件的确认150
6.3Read-Write Lock模式中的登场角色151
6.4拓展思路的要点153
利用“读取”操作的线程之间不会冲突的特性来提高程序性能153
适合读取操作繁重时153
适合读取频率比写入频率高时153
锁的含义153
6.5相关的设计模式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本章所学知识156
6.8练习题157
第7章Thread-Per-Message模式——这项工作就交给你了163
7.1Thread-Per-Message模式164
7.2示例程序164
Main类164
Host类165
Helper类166
7.3Thread-Per-Message模式中的登场角色168
7.4拓展思路的要点169
提高响应性,缩短延迟时间169
适用于操作顺序没有要求时169
适用于不需要返回值时169
应用于服务器169
调用方法+启动线程→发送消息170
7.5相关的设计模式170
Future模式170
Worker Thread模式170
7.6延伸阅读1:进程与线程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
总结178
7.8本章所学知识180
7.9练习题180
第8章Worker Thread模式——工作没来就一直等,工作来了就干活187
8.1Worker Thread模式188
8.2示例程序188
Main类189
ClientThread类190
Request类190
Channel类191
WorkerThread类192
8.3Worker Thread模式中的登场角色193
8.4拓展思路的要点195
提高吞吐量195
容量控制195
调用与执行的分离196
Runnable接口的意义197
多态的Request角色198
独自一人的Worker角色199
8.5相关的设计模式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事件分发线程200
什么是事件分发线程200
事件分发线程只有一个200
事件分发线程调用监听器201
注册监听器的意义201
事件分发线程也负责绘制界面201
javax.swing.SwingUtilities类202
Swing的单线程规则203
8.7延伸阅读2:java.util.concurrent包和Worker Thread模式204
ThreadPoolExecutor类204
通过java.util.concurrent包创建线程池205
8.8本章所学知识207
8.9练习题208
第9章Future模式——先给您提货单211
9.1Future模式212
9.2示例程序212
Main类214
Host类214
Data接口215
FutureData类216
RealData类217
9.3Future模式中的登场角色218
9.4拓展思路的要点219
吞吐量会提高吗219
异步方法调用的“返回值”220
“准备返回值”和“使用返回值”的分离220
变种——不让主线程久等的Future角色220
变种——会发生变化的Future角色221
谁会在意多线程呢?“可复用性”221
回调与Future模式221
9.5相关的设计模式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本章所学知识226
9.8练习题226
□□0章Two-Phase Termination模式——先收拾房间再睡觉231
10.1Two-Phase Termination模式232
10.2示例程序233
CountupThread类234
Main类236
10.3Two-Phase Termination模式中的登场角色237
10.4拓展思路的要点238
不能使用Thread类的stop方法238
仅仅检查标志是不够的239
仅仅检查中断状态是不够的239
在长时间处理前检查终止请求239
join方法和isAlive方法240
java.util.concurrent.ExecutorService接口与Two-Phase Termination模式240
要捕获程序整体的终止时241
优雅地终止线程243
10.5相关的设计模式243
Before/After模式243
Multiphase Cancellation模式243
Multi-Phase Startup模式244
Balking模式244
10.6延伸阅读1:中断状态与InterruptedException异常的相互转换244
中断状态→InterruptedException异常的转换244
InterruptedException异常→中断状态的转换245
InterruptedException异常→InterruptedException异常的转换245
10.7延伸阅读2:java.util.concurrent包与线程同步246
java.util.concurrent.CountDownLatch类246
java.util.concurrent.CyclicBarrier类249
10.8本章所学知识253
10.9练习题253
□□1章Thread-Specific Storage模式——一个线程一个储物柜263
11.1Thread-Specific Storage模式264
11.2关于java.lang.ThreadLocal类264
java.lang.ThreadLocal就是储物间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模式中的登场角色272
11.6拓展思路的要点274
局部变量与java.lang.ThreadLocal类274
保存线程特有的信息的位置275
不必担心其他线程访问275
吞吐量的提高很大程序上取决于实现方式276
上下文的危险性276
11.7相关的设计模式277
Singleton模式277
Worker Thread模式277
Single Threaded Execution模式277
Proxy模式277
11.8 延伸阅读:基于角色与基于任务277
主体与客体277
基于角色的考虑方式278
基于任务的考虑方式278
实际上两种方式是综合在一起的279
11.9本章所学知识279
11.10练习题280
□□2章Active Object模式——接收异步消息的主动对象283
12.1Active Object模式284
12.2示例程序1284
调用方:Main类287
调用方:MakerClientThread类288
调用方:DisplayClientThread类289
主动对象方:ActiveObject接口289
主动对象方:ActiveObjectFactory类290
主动对象方:Proxy类290
主动对象方:SchedulerThread类291
主动对象方:ActivationQueue类292
主动对象方:MethodRequest类293
主动对象方:MakeStringRequest类294
主动对象方:DisplayStringRequest类295
主动对象方:Result类295
主动对象方:FutureResult类296
主动对象方:RealResult类296
主动对象方:Servant类297
示例程序1的运行297
12.3ActiveObject模式中的登场角色298
12.4拓展思路的要点304
到底做了些什么事情304
运用模式时需要考虑问题的粒度304
关于并发性304
增加方法305
Scheduler角色的作用305
主动对象之间的交互306
通往分布式——从跨越线程界线变为跨越计算机界线306
12.5相关的设计模式306
Producer-Consumer模式306
Future模式307
Worker Thread模式307
Thread-Specific Storage模式307
12.6延伸阅读:java.util.concurrent包与Active Object模式307
类与接口307
调用方:Main类309
调用方:MakerClientThread类309
调用方:DisplayClientThread类310
主动对象方:ActiveObject接口311
主动对象方:ActiveObjectFactory类311
主动对象:ActiveObjectImpl类312
示例程序2的运行313
12.7本章所学知识314
12.8练习题315
□□3章总结——多线程编程的模式语言321
13.1多线程编程的模式语言322
模式与模式语言322
13.2Single Threaded Execution模式
——能通过这座桥的只有一个人323
13.3 Immutable模式
——想破坏也破坏不了324
13.4 Guarded Suspension模式
——等我准备好哦325
13.5 Balking模式
——不需要就算了326
13.6 Producer-Consumer模式
——我来做,你来用327
13.7 Read-Write Lock模式
——大家一起读没问题,但读的时候不要写哦328
13.8 Thread-Per-Message模式
——这项工作就交给你了329
13.9 Worker Thread模式
——工作没来就一直等,工作来了就干活330
13.10Future模式
——先给您提货单330
13.11Two-Phase Termination模式
——先收拾房间再睡觉331
13.12Thread-Specific Storage模式
——一个线程一个储物柜332
13.13Active Object模式
——接收异步消息的主动对象333
13.14写在□后335
附录337
附录A 习题解答338
附录B Java内存模型447
附录C Java线程的优先级467
附录D 线程相关的主要API469
附录E java.util.concurrent包475
附录F 示例程序的运行步骤483
附录G 参考文献485

精彩书摘

  《图解Java多线程设计模式》:
  性能(performance)是指能快速、大批量地执行处理。这也不是程序正常运行的必要条件,但却是提高程序质量时应该考虑的条件。
  影响性能的因素有好多种。下面是从Doug Lea的性能分类中摘录出的主要部分。
  吞吐量(throughput)是指单位时间内完成的处理数量。能完成的处理越多,则表示吞吐量越大。
  响应性(responsiveness)是指从发出请求到收到响应的时间。时间越短,响应性也就越好。在GUI程序中,相比于到处理“结束”时的时间,到处理“开始”时的时间更为重要。前者是指实际处理所花费的时间,而后者是到程序开始响应用户所花费的时间。相比于按下按钮后无任何反应,10秒后才提示“处理完毕”这种方式,在按下按钮时立刻提示“处理开始”这种方式的响应性更高,即便到处理结束花费的时间稍多一点也没关系。响应性好也称为等待时间(latency)短。
  容量(capacity)是指可同时进行的处理数量。例如,服务器能同时处理的客户端数或文件数等。
  其他的诸如效率(efficiency)、可伸缩性(scalability)、降级(degradation)等,也可作为性能的评价标准。
  有时候,这些要素之间会相互制约(也就是常说的有得必有失)。例如,如果要提高吞吐量,那么在很多情况下,程序的响应性就会下降。就像我们为了提高工作量而目不转睛地干活时,如果有人打招呼,那我们的反应就会慢半拍这样。反应慢半拍也就是说响应性变低了。另外,如果要提高安全性,那么性能就可能会下降(如吞吐量变小)。这就好比是为了防止混乱而减少一次处理的工作量时,一定时间内能处理的工作量自然而然地就变少了。
  ……

作者简介

结城浩(作者)
生于1963年,日本资-深技术作家和程序员。在编程语言、设计模式、数学、加密技术等领域,编写了很多深受欢迎的入门书。代表作有《数学女孩》系列、《程序员的数学》、《图解密码技术》等。

侯振龙(译者)
管理科学与工程专业硕士,日语一级,软件开发工程师,具有十年对日软件开发经验,现就职于某日本独资企业。

杨文轩(译者)
华中科技大学硕士,擅长Web 2.0开发,有丰富的对日开发经验。现就职于日本方正股份有限公司。译作有《图解基础设施设计模式》《C现代编程:集成开发环境、设计模式、极限编程、测试驱动开发、重构、持续集成》及《图解设计模式》。