[套装书]Java高并发编程详解:深入理解并发核心库+Java高并发编程详解:多线程与架构设计(2册)

作者
汪文君
丛书名
Java核心技术系列
出版社
机械工业出版社
ISBN
9782109261920
简要
简介
内容简介书籍计算机书籍 ---------------------------8071119 - Java高并发编程详解:深入理解并发核心库--------------------------- 本书共包含四大部分,其中,第一部分(第1章)详细介绍了JMH(Java Micro benchmark Harness)基准测试工具的使用细节。该工具是由Oracle JVM开发团队相关成员开发的,借助它,开发者将能足够了解自己所编写的程序代码,以及程序在运行期的精确性能表现。在本书的其他章节对API之间的性能进行对比时,主要也是依赖于该工具,因此在学习本书的其他章节时,最好能够掌握该部分内容,强烈推荐开发者将JMH纳入自己日常的“兵器库”中,以便能够随时随地进行利用。 第二部分主要围绕Java并发包进行展开,涉及的内容包括Java的原子类型及其底层原理(第2章);Java的并发工具集(第3章),其中还穿插了Google Guava的部分内容;Java的并发容器(第4章),包括阻塞队列BlockingQueue和并发容器等内容;Java的ExecutorService(第5章),以及Future家族成员的详解。 第三部分(第6章),主要介绍自Java 8 引入的Stream,并且重点解释了具备高并发能力的并行流原理,以及如何自定义并行流等相关内容。 第四部分(第7章),深入讲解Metrics,它作为一个比较小巧的度量工具集,目前已经成为事实上的度量标准,在很多开源软件、框架和平台中都能看到对它的使用,比如Apache的Kafka、Spark、Storm、Spring Cloud等都是使用Metrics作为系统运行性能指标收集的手段。 ---------------------------8010626 - Java高并发编程详解:多线程与架构设计--------------------------- 本书主要包含四个部分: 部分主要阐述Thread的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信,以及如何保护共享资源等内容,它是深入学习多线程内容的基础。 第二部分引入了ClassLoader,这是因为ClassLoader与线程不无关系,我们可以通过synchronized关键字,或者Lock等显式锁的方式在代码的编写阶段对共享资源进行数据一致性保护,那么一个Class在完成初始化的整个过程到后在方法区(JDK8 以后在元数据空间)其数据结构是怎样确保数据一致性的呢?这就需要对ClassLoader有一个比较全面的认识和了解。 第三部分详细、深入地介绍volatile关键字的语义,volatile关键字在Java中非常重要,可以说它奠定了Java核心并发包的高效运行,在这一部分中,我们通过实例展示了如何使用volatile关键字以及非常详细地介绍了Java内存模型等知识。 本书的第四部分,站在程序架构设计的角度深入讲解了如何设计高效灵活的多线程应用程序,这一部分长达15个章节,其重要程度可见一斑。 .
目录
[套装书具体书目]
8010626 - Java高并发编程详解:多线程与架构设计 - 9787111599937 - 机械工业出版社 - 定价 89
8071119 - Java高并发编程详解:深入理解并发核心库 - 9787111657705 - 机械工业出版社 - 定价 99



---------------------------8071119 - Java高并发编程详解:深入理解并发核心库---------------------------


推荐序一
推荐序二
推荐序三
推荐序四
前  言
第1章 JMH 1
1.1 JMH简介 1
1.2 JMH快速入门 1
1.2.1 用main方法进行测试 1
1.2.2 用JMH进行微基准测试 3
1.3 JMH的基本用法 6
1.3.1 @Benchmark标记基准测试方法 7
1.3.2 Warmup以及Measurement 8
1.3.3 四大BenchmarkMode 10
1.3.4 OutputTimeUnit 14
1.3.5 三大State的使用 14
1.3.6 @Param的妙用 19
1.3.7 JMH的测试套件(Fixture) 23
1.3.8 CompilerControl 26
1.4 编写正确的微基准测试以及高级用法 27
1.4.1 编写正确的微基准测试用例 28
1.4.2 一些高级的用法 38
1.5 JMH的Profiler 45
1.5.1 StackProfiler 45
1.5.2 GcProfiler 47
1.5.3 ClassLoaderProfiler 51
1.5.4 CompilerProfiler 54
1.6 本章总结 56
第2章 Java并发包之原子类型详解 57
2.1 AtomicInteger详解 58
2.1.1 性能测试对比 58
2.1.2 AtomicInteger的基本用法 61
2.1.3 AtomicInteger内幕 66
2.1.4 AtomicInteger总结 68
2.2 AtomicBoolean详解 69
2.2.1 AtomicBoolean的基本用法 69
2.2.2 AtomicBoolean内幕 71
2.2.3 Try Lock显式锁的实现 71
2.2.4 AtomicBoolean总结 74
2.3 AtomicLong详解 74
2.4 AtomicReference详解 76
2.4.1 AtomicReference的应用场景 77
2.4.2 AtomicReference的基本用法 83
2.4.3 AtomicReference的内幕 84
2.4.4 AtomicReference总结 86
2.5 AtomicStampedReference详解 86
2.5.1 CAS算法ABA问题 86
2.5.2 AtomicStampedReference详解 87
2.5.3 AtomicStampedReference总结 89
2.6 AtomicArray详解 89
2.7 AtomicFieldUpdater详解 90
2.7.1 原子性更新对象属性 90
2.7.2 注意事项 91
2.7.3 AtomicFieldUpdater总结 93
2.8 sun.misc.Unsafe详解 93
2.8.1 如何获取Unsafe 94
2.8.2 JNI、Java和C/C++混合编程 95
2.8.3 危险的Unsafe 98
2.8.4 sun.misc.Unsafe总结 100
2.9 本章总结 100
第3章 Java并发包之工具类详解 102
3.1 CountDownLatch工具详解 102
3.1.1 等待所有子任务结束 103
3.1.2 CountDownLatch的其他方法及总结 106
3.2 CyclicBarrier工具详解 107
3.2.1 等待所有子任务结束 107
3.2.2 CyclicBarrier的循环特性 110
3.2.3 CyclicBarrier的其他方法以及总结 114
3.2.4 CyclicBarrier VS. CountDownLatch 116
3.3 Exchanger工具详解 116
3.3.1 一对线程间的数据交换 116
3.3.2 Exchanger的方法详解 121
3.3.3 Exchanger总结 123
3.4 Semaphore工具详解 124
3.4.1 Semaphore限制同时在线的用户数量 124
3.4.2 使用Semaphore定义try lock 127
3.4.3 Semaphore其他方法详解 129
3.4.4 扩展Semaphore增强release 135
3.4.5 Semaphore总结 138
3.5 Phaser工具详解 138
3.5.1 Phaser的基本用法 138
3.5.2 Phase(阶段)以及Phaser方法详解 144
3.5.3 Phaser层级关系 148
3.5.4 Phaser总结 149
3.6 Lock&ReentrantLock详解 150
3.6.1 Lock及ReentrantLock方法详解 150
3.6.2 正确使用显式锁Lock 152
3.6.3 ReentrantLock VS. Synchronized关键字 158
3.6.4 显式锁Lock总结 164
3.7 ReadWriteLock&ReentrantRead-WriteLock详解 165
3.7.1 读写锁的基本使用方法 165
3.7.2 读写锁的方法 167
3.7.3 基准测试性能对比 167
3.7.4 读写锁总结 170
3.8 Condition详解 171
3.8.1 初识Condition 171
3.8.2 Condition接口方法详解 174
3.8.3 使用Condition之生产者消费者 177
3.8.4 Condition总结 181
3.9 StampedLock详解 181
3.9.1 读写锁的饥饿写问题 182
3.9.2 StampedLock的使用 183
3.9.3 与其他锁的性能对比 185
3.9.4 StampedLock总结 191
3.10 Guava之Monitor详解 192
3.10.1 Monitor及Guard 192
3.10.2 Monitor的其他方法 194
3.10.3 Monitor总结 194
3.11 Guava之RateLimiter详解 194
3.11.1 RateLimiter的基本使用 195
3.11.2 RateLimiter的限流操作——漏桶算法 196
3.11.3 令牌环桶算法 201
3.11.4 RateLimiter总结 204
3.12 本章总结 204
第4章 Java并发包之并发容器详解 205
4.1 链表 206
4.1.1 基本的链表 206
4.1.2 优先级链表 210
4.1.3 跳表(SkipList) 213
4.1.4 链表总结 221
4.2 BlockingQueue(阻塞队列) 221
4.2.1 ArrayBlockingQueue 222
4.2.2 PriorityBlockingQueue 226
4.2.3 LinkedBlockingQueue 228
4.2.4 DelayQueue 228
4.2.5 SynchronousQueue 231
4.2.6 LinkedBlockingDeque 233
4.2.7 LinkedTransferQueue 234
4.2.8 BlockingQueue总结 236
4.3 ConcurrentQueue(并发队列) 237
4.3.1 并发队列的性能 239
4.3.2 并发队列在使用中需要注意的问题 241
4.3.3 并发队列总结 245
4.4 ConcurrentMap(并发映射) 245
4.4.1 ConcurrentHashMap简介 245
4.4.2 ConcurrentSkipListMap简介 247
4.4.3 并发映射总结 247
4.5 写时拷贝算法(Copy On Write) 248
4.5.1 CopyOnWrite读实现操作分析 249
4.5.2 CopyOnWrite写实现操作分析 249
4.5.3 CopyOnWrite总结 250
4.6 高并发无锁(Lock Free)数据结构的实现 250
4.6.1 高并发无锁链表的实现 250
4.6.2 Lock Free数据结构的测试 253
4.6.3 本节总结 255
4.7 本章总结 255
第5章 Java并发包之ExecutorService详解 256
5.1 Executor&ExecutorService详解 256
5.1.1 ThreadPoolExecutor详解 257
5.1.2 ScheduledExecutorService详解 265
5.1.3 关闭ExecutorService 271
5.1.4 Executors详解 273
5.1.5 ExecutorService总结 276
5.2 Future和Callback 277
5.2.1 Future详解 277
5.2.2 ExecutorService与Future 280
5.2.3 Future的不足之处 282
5.2.4 Google Guava的Future 282
5.2.5 Future总结 284
5.3 ForkJoinPool 详解 284
5.3.1 Fork/Join Framework介绍 284
5.3.2 ForkJoinTask详解 285
5.3.3 ForkJoinPool总结 289
5.4 CompletionService详解 289
5.4.1 ExecutorService执行批量任务的缺陷 289
5.4.2 CompletionService详解 291
5.4.3 CompletionService总结 294
5.5 CompletableFuture详解 294
5.5.1 CompletableFuture的基本用法 294
5.5.2 任务的异步运行 296
5.5.3 异步任务链 296
5.5.4 合并多个Future 298
5.5.5 多Future的并行计算 299
5.5.6 错误处理 299
5.5.7 JDK 9对CompletableFuture的进一步支持 300
5.5.8 CompletableFuture总结 300
5.6 本章总结 301
第6章 Java Streams详解 302
6.1 Stream介绍及其基本操作 302
6.1.1 如何创建Stream 303
6.1.2 Stream之Intermediate操作 306
6.1.3 Stream之Terminal操作 312
6.1.4 NumericStream详解 317
6.1.5 Stream总结 320
6.2 Collector在Stream中的使用 320
6.2.1 初识Collector 321
6.2.2 Collectors用法详解 324
6.2.3 自定义Collector 335
6.2.4 Collector总结 336
6.3 Parallel Stream详解 337
6.3.1 并行流Parallel Stream 337
6.3.2 Spliterator 详解 340
6.3.3 Spliterator总结 343
6.4 本章总结 344
第7章 Metrics(Powerful Toolkit For Measure) 345
7.1 Metrics快速入门 345
7.1.1 如何监控度量应用程序 345
7.1.2 Metrics环境搭建 346
7.2 五大Metric详解 346
7.2.1 Meter 347
7.2.2 Gauge 349
7.2.3 Counter 360
7.2.4 Histogram 362
7.2.5 Timer 370
7.3 Reporter详解 372
7.3.1 ConsoleReporter 373
7.3.2 LogReporter 376
7.3.3 JMXReporter 378
7.3.4 CsvReporter 379
7.4 Metrics Plugins 380
7.4.1 Health Check 381
7.4.2 JVM Instrumentation 386
7.5 深入Metrics源码 387
7.5.1 MetricRegistry如何工作 388
7.5.2 Reporter如何工作 392
7.5.3 拾遗补漏 394
7.6 本章总结 396



---------------------------8010626 - Java高并发编程详解:多线程与架构设计---------------------------


推荐序一
推荐序二
推荐序三
推荐序四
前言
第一部分 多线程基础
第1章 快速认识线程 3
1.1 线程的介绍 3
1.2 快速创建并启动一个线程 3
1.2.1 尝试并行运行 4
1.2.2 并发运行交替输出 5
1.2.3 使用Jconsole观察线程 6
1.3 线程的生命周期详解 7
1.3.1 线程的NEW状态 8
1.3.2 线程的RUNNABLE状态 8
1.3.3 线程的 RUNNING状态 8
1.3.4 线程的BLOCKED状态 8
1.3.5 线程的TERMINATED状态 9
1.4 线程的start方法剖析:模板设计模式在Thread中的应用 9
1.4.1 Thread start方法源码分析以及注意事项 9
1.4.2 模板设计模式在Thread中的应用 11
1.4.3 Thread模拟营业大厅叫号机程序 13
1.5 Runnable接口的引入以及策略模式在Thread中的使用 16
1.5.1 Runnable的职责 16
1.5.2 策略模式在Thread中的应用 16
1.5.3 模拟营业大厅叫号机程序 18
1.6 本章总结 19
第2章 深入理解Thread构造函数 20
2.1 线程的命名 20
2.1.1 线程的默认命名 21
2.1.2 命名线程 21
2.1.3 修改线程的名字 22
2.2 线程的父子关系 22
2.3 Thread与ThreadGroup 23
2.4 Thread与Runnable 24
2.5 Thread与JVM虚拟机栈 25
2.5.1 Thread与Stacksize 25
2.5.2 JVM内存结构 27
2.5.3 Thread与虚拟机栈 30
2.6 守护线程 33
2.6.1 什么是守护线程 33
2.6.2 守护线程的作用 34
2.7 本章总结 34
第3章 Thread API的详细介绍 35
3.1 线程sleep 35
3.1.1 sleep方法介绍 35
3.1.2 使用TimeUnit替代Thread.sleep 36
3.2 线程yield 37
3.2.1 yield方法介绍 37
3.2.2 yield和sleep 37
3.3 设置线程的优先级 38
3.3.1 线程优先级介绍 38
3.3.2 线程优先级源码分析 39
3.3.3 关于优先级的一些总结 40
3.4 获取线程ID 40
3.5 获取当前线程 41
3.6 设置线程上下文类加载器 41
3.7 线程interrupt 42
3.7.1 interrupt 42
3.7.2 isInterrupted 43
3.7.3 interrupted 45
3.7.4 interrupt注意事项 46
3.8 线程join 47
3.8.1 线程join方法详解 48
3.8.2 join方法结合实战 50
3.9 如何关闭一个线程 53
3.9.1 正常关闭 54
3.9.2 异常退出 56
3.9.3 进程假死 56
3.10 本章总结 58
第4章 线程安全与数据同步 59
4.1 数据同步 59
4.1.1 数据不一致问题的引入 59
4.1.2 数据不一致问题原因分析 61
4.2 初识 synchronized关键字 62
4.2.1 什么是synchronized 63
4.2.2 synchronized关键字的用法 63
4.3 深入synchronized关键字 65
4.3.1 线程堆栈分析 65
4.3.2 JVM指令分析 67
4.3.3 使用synchronized需要注意的问题 70
4.4 This Monitor和Class Monitor的详细介绍 72
4.4.1 this monitor 72
4.4.2 class monitor 74
4.5 程序死锁的原因以及如何诊断 77
4.5.1 程序死锁 77
4.5.2 程序死锁举例 77
4.5.3 死锁诊断 80
4.6 本章总结 81
第5章 线程间通信 82
5.1 同步阻塞与异步非阻塞 82
5.1.1 同步阻塞消息处理 82
5.1.2 异步非阻塞消息处理 83
5.2 单线程间通信 84
5.2.1 初识wait和notify 84
5.2.2 wait和notify方法详解 87
5.2.3 关于wait和notify的注意事项 89
5.2.4 wait和sleep 90
5.3 多线程间通信 90
5.3.1 生产者消费者 90
5.3.2 线程休息室wait set 93
5.4 自定义显式锁BooleanLock 94
5.4.1 synchronized关键字的缺陷 94
5.4.2 显式锁BooleanLock 95
5.5 本章总结 104
第6章 ThreadGroup详细讲解 105
6.1 ThreadGroup与Thread 105
6.2 创建ThreadGroup 105
6.3 复制Thread数组和ThreadGroup数组 106
6.3.1 复制Thread数组 106
6.3.2 复制ThreadGroup数组 109
6.4 ThreadGroup操作 109
6.4.1 ThreadGroup的基本操作 110
6.4.2 ThreadGroup的interrupt 113
6.4.3 ThreadGroup的destroy 114
6.4.4 守护ThreadGroup 115
6.5 本章总结 116
第7章 Hook线程以及捕获线程执行异常 117
7.1 获取线程运行时异常 117
7.1.1 UncaughtExceptionHandler的介绍 117
7.1.2 UncaughtExceptionHandler实例 118
7.1.3 UncaughtExceptionHandler源码分析 119
7.2 注入钩子线程 121
7.2.1 Hook线程介绍 121
7.2.2 Hook线程实战 122
7.2.3 Hook线程应用场景以及注意事项 124
7.3 本章总结 124
第8章 线程池原理以及自定义线程池 125
8.1 线程池原理 125
8.2 线程池实现 126
8.2.1 线程池接口定义 127
8.2.2 线程池详细实现 131
8.3 线程池的应用 139
8.4 本章总结 142
第二部分 Java ClassLoader
第9章 类的加载过程 144
9.1 类的加载过程简介 144
9.2 类的主动使用和被动使用 145
9.3 类的加载过程详解 148
9.3.1 类的加载阶段 148
9.3.2 类的连接阶段 149
9.3.3 类的初始化阶段 154
9.4 本章总结 156
第10章 JVM类加载器 158
10.1 JVM内置三大类加载器 158
10.1.1 根类加载器介绍 159
10.1.2 扩展类加载器介绍 159
10.1.3 系统类加载器介绍 160
10.2 自定义类加载器 161
10.2.1 自定义类加载器,问候世界 161
10.2.2 双亲委托机制详细介绍 165
10.2.3 破坏双亲委托机制 167
10.2.4 类加载器命名空间、运行时包、类的卸载等 170
10.3 本章总结 175
第11章 线程上下文类加载器 177
11.1 为什么需要线程上下文类加载器 177
11.2 数据库驱动的初始化源码分析 178
11.3 本章总结 180
第三部分 深入理解volatile关键字
第12章 volatile关键字的介绍 182
12.1 初识volatile关键字 182
12.2 机器硬件CPU 184
12.2.1 CPU Cache模型 184
12.2.2 CPU缓存一致性问题 186
12.3 Java内存模型 187
12.4 本章总结 188
第13章 深入volatile关键字 189
13.1 并发编程的三个重要特性 189
13.1.1 原子性 189
13.1.2 可见性 190
13.1.3 有序性 190
13.2 JMM如何保证三大特性 191
13.2.1 JMM与原子性 192
13.2.2 JMM与可见性 193
13.2.3 JMM与有序性 194
13.3 volatile关键字深入解析 195
13.3.1 volatile关键字的语义 195
13.3.2 volatile的原理和实现机制 197
13.3.3 volatile的使用场景 198
13.3.4 volatile和synchronized 199
13.4 本章总结 200
第14章 7种单例设计模式的设计 201
14.1 饿汉式 201
14.2 懒汉式 202
14.3 懒汉式+同步方法 203
14.4 Double-Check 204
14.5 Volatile+Double-Check 206
14.6 Holder方式 206
14.7 枚举方式 207
14.8 本章总结 208
第四部分 多线程设计架构模式
第15章 监控任务的生命周期 212
15.1 场景描述 212
15.2 当观察者模式遇到Thread 212
15.2.1 接口定义 212
15.2.2 ObservableThread实现 215
15.3 本章总结 217
15.3.1 测试运行 217
15.3.2 关键点总结 219
第16章 Single Thread Execution设计模式 220
16.1 机场过安检 220
16.1.1 非线程安全 221
16.1.2 问题分析 223
16.1.3 线程安全 225
16.2 吃面问题 225
16.2.1 吃面引起的死锁 226
16.2.2 解决吃面引起的死锁问题 228
16.2.3 哲学家吃面 229
16.3 本章总结 230
第17章 读写锁分离设计模式 231
17.1 场景描述 231
17.2 读写分离程序设计 232
17.2.1 接口定义 232
17.2.2 程序实现 234
17.3 读写锁的使用 239
17.4 本章总结 242
第18章 不可变对象设计模式 244
18.1 线程安全性 244
18.2 不可变对象的设计 244
18.2.1 非线程安全的累加器 245
18.2.2 方法同步增加线程安全性 247
18.2.3 不可变的累加器对象设计 248
18.3 本章总结 249
第19章 Future设计模式 251
19.1 先给你一张凭据 251
19.2 Future设计模式实现 251
19.2.1 接口定义 252
19.2.2 程序实现 253
19.3 Future的使用以及技巧总结 256
19.4 增强FutureService使其支持回调 257
19.5 本章总结 258
第20章 Guarded Suspension设计模式 259
20.1 什么是Guarded Suspension设计模式 259
20.2 Guarded Suspension的示例 259
20.3 本章总结 261
第21章 线程上下文设计模式 262
21.1 什么是上下文 262
21.2 线程上下文设计 263
21.3 ThreadLocal详解 264
21.3.1 ThreadLocal的使用场景及注意事项 265
21.3.2 ThreadLocal的方法详解及源码分析 265
21.3.3 ThreadLocal的内存泄漏问题分析 270
21.4 使用ThreadLocal设计线程上下文 274
21.5 本章总结 276
第22章 Balking设计模式 277
22.1 什么是Balking设计 277
22.2 Balking模式之文档编辑 278
22.2.1 Document 278
22.2.2 AutoSaveThread 280
22.2.3 DocumentEditThread 281
22.3 本章总结 283
第23章 Latch设计模式 284
23.1 什么是Latch 284
23.2 CountDownLatch程序实现 285
23.2.1 无限等待的Latch 285
23.2.2 有超时设置的Latch 289
23.3 本章总结 291
第24章 Thread-Per-Message设计模式 293
24.1 什么是Thread-Per-Message模式 293
24.2 每个任务一个线程 293
24.3 多用户的网络聊天 296
24.3.1 服务端程序 296
24.3.2 响应客户端连接的Handler 297
24.3.3 聊天程序测试 299
24.4 本章总结 300
第25章 Two Phase Termination设计模式 301
25.1 什么是Two Phase Termination模式 301
25.2 Two Phase Termination的示例 302
25.2.1 线程停止的Two Phase Termination 302
25.2.2 进程关闭的Two Phase Termination 303
25.3 知识扩展 304
25.3.1 Strong Reference及LRUCache 304
25.3.2 Soft Reference及SoftLRUCache 308
25.3.3 Weak Reference 311
25.3.4 Phantom Reference 312
25.4 本章总结 314
第26章 Worker-Thread设计模式 315
26.1 什么是Worker-Thread模式 315
26.2 Worker-Thread模式实现 315
26.2.1 产品及组装说明书 316
26.2.2 流水线传送带 317
26.2.3 流水线工人 319
26.3 本章总结 320
26.3.1 产品流水线测试 320
26.3.2 Worker-Thread和Producer-Consumer 321
第27章 Active Objects设计模式 323
27.1 接受异步消息的主动对象 323
27.2 标准Active Objects模式设计 323
27.2.1 OrderService接口设计 325
27.2.2 OrderServiceImpl 详解 325
27.2.3 OrderServiceProxy详解 326
27.2.4 MethodMessage 328
27.2.5 ActiveMessageQueue 330
27.2.6 OrderServiceFactory及测试 332
27.3 通用Active Objects框架设计 333
27.3.1 ActiveMessage详解 334
27.3.2 @ActiveMethod 336
27.3.3 ActiveServiceFactory详解 337
27.3.4 ActiveMessageQueue及其他 339
27.4 本章总结 341
第28章 Event Bus设计模式 342
28.1 Event Bus设计 343
28.1.1 Bus接口详解 343
28.1.2 同步EventBus详解 345
28.1.3 异步EventBus详解 347
28.1.4 Subscriber注册表Registry详解 348
28.1.5 Event广播Dispatcher详解 350
28.1.6 其他类接口设计 353
28.1.7 Event Bus测试 355
28.2 Event Bus实战——监控变化 357
28.2.1 WatchService遇到EventBus 357
28.2.2 FileChangeEvent 359
28.2.3 监控变化 359
28.3 本章总结 360
第29章 Event Driven设计模式 361
29.1 Event-Driven Architecture基础 361
29.1.1 Events 361
29.1.2 Event Handlers 362
29.1.3 Event Loop 363
29.2 开发一个Event-Driven框架 364
29.2.1 同步EDA框架设计 364
29.2.2 异步EDA框架设计 370
29.3 Event-Driven的使用 375
29.3.1 Chat Event 375
29.3.2 Chat Channel(Handler) 376
29.3.3 Chat User线程 377
29.4 本章总结 379

相关资源(PDF,TXT,电子书)

村网 国学鼎 数字追踪 车牌号查询 生活分享
桂ICP备20004708号-2