图解Java多线程设计模式 结城浩 人民邮电出版社 9787115462749pdf下载

图解Java多线程设计模式 结城浩 人民邮电出版社 9787115462749百度网盘pdf下载

作者:
简介:图解Java多线程设计模式 结城浩 人民邮电出版社 9787115462749
出版社:
出版时间:2017-08
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

   图书基本信息
图书名称 图解Java多线程设计模式
作者 结城浩
定价 89.00元
出版社 人民邮电出版社
ISBN 9787115462749
出版日期 2017-08-01
字数 944千字
页码 491
版次 1
装帧 平装-胶订
开本 16开
商品重量 0.4Kg

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

   作者简介
结城浩(作者)生于1963年,日本资-深技术作家和程序员。在编程语言、设计模式、数学、加密技术等领域,编写了很多深受欢迎的入门书。作有《数学女孩》系列、《程序员的数学》、《图解密码技术》等。侯振龙(译者)管理科学与工程专业硕士,日语一级,软件开发工程师,具有十年对日软件开发经验,现就职于某日本独资企业。杨文轩(译者)华中科技大学硕士,擅长Web 2.0开发,有丰富的对日开发经验。现就职于日本方正股份有限公司。译作有《图解基础设施设计模式》《C现代编程:集成开发环境、设计模式、极限编程、测试驱动开发、重构、持续集成》及《图解设计模式》。

   目录
序章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

   编辑推荐
精选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.对面向对象开发感兴趣的人

   文摘

   序言