《Java多线程与Socket》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:庞永华著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2019
  • ISBN:9787121360350
  • 页数:433 页
图书介绍:本书先逐一介绍Java微服务框架所需要的基础知识,包括:多线程、Socket、Spring 容器技术、动态代理、动态字节码、序列化等技术。然后介绍了一种微服务框架的架构设计。再将这一微服务框架分解为底层Socket通信、服务注册与发现、服务暴露与引用、远程方法调用等层面,逐一讲解。详细介绍作者是如何基于这些技术来构建这样一套完整的微服务框架的。最后对微服务框架和微服务治理系统进行了介绍。从基础知识入手,逐步将读者带入Java微服务与分布式技术领域。

第1章 多线程基础 1

1.1 多线程的概念 1

1.1.1 进程与线程 1

1.1.2 并发与并行 2

1.1.3 线程状态 2

1.2 Thread线程类 3

1.2.1 基本用法与思考 3

1.2.2 常用方法介绍 4

1.2.3 wait和sleep的区别 5

1.2.4 sleep和yield的区别 5

1.3 Runnable接口 6

1.4 线程池 6

1.4.1 Executors 6

1.4.2 ExecutorService 7

1.4.3 ThreadPoolExecutor 8

1.4.4 基本用法与思考 9

1.5 Callable与Future 10

1.6 线程安全与效率 11

1.6.1 什么是线程安全 11

1.6.2 线程同步 13

1.6.3 饥饿与公平 14

1.6.4 锁与死锁 14

1.6.5 线程中断 15

1.7 编程进阶 16

1.7.1 volatile关键字 16

1.7.2 synchronized关键字 19

1.7.3 wait/notify/notifyAll 21

1.7.4 CAS操作 22

1.7.5 atomic包 24

1.7.6 Lock自旋锁 25

1.7.7 Condition条件变量 28

1.7.8 线程安全容器 30

1.7.9 ThreadLocal类 32

1.7.10 CountDownLatch计数器 33

1.7.11 CyclicBarrier栅栏 34

1.7.12 Semaphore信号量 35

1.7.13 fork/join框架 36

第2章 Socket基础 40

2.1 TCP与Socket 40

2.2 TCP的通信过程 41

2.2.1 基本过程 41

2.2.2 建立连接 42

2.2.3 全双工异步通信 43

2.2.4 断开连接 44

2.2.5 优雅地断开 45

2.2.6 半……连接 45

2.3 通信方式 45

2.3.1 长连接与短连接 46

2.3.2 线程模型 47

2.3.3 拆包与组包 49

2.3.4 断包与粘包 51

2.3.5 数据包的结构 52

2.4 BIO 52

2.4.1 典型编程模型 53

2.4.2 关键API概述 53

2.4.3 字符流传输 54

2.4.4 字节流传输 59

2.4.5 传输多笔数据 62

2.5 NIO 66

2.5.1 NIO简介 66

2.5.2 Buffer 67

2.5.3 Channel 70

2.5.4 Selector 73

2.5.5 Scatter/Gather 75

2.5.6 Pipe 76

2.5.7 内存映像文件 76

2.5.8 文件传输示例 78

2.5.9 “聊天室”示例 84

2.6 AIO 93

2.6.1 AIO简介 93

2.6.2 关键API概述 94

2.6.3 示例代码 95

第3章 Spring与Spring Cloud 104

3.1 Spring简介 104

3.2 IoC容器 105

3.2.1 IoC的概念 105

3.2.2 Spring中的bean 106

3.2.3 XML配置方式 106

3.2.4 注解配置方式 107

3.2.5 用Java类来配置 109

3.2.6 BeanFactory与FactoryBean 110

3.2.7 ApplicationContext与ApplicationContextAware 112

3.2.8 动态注册bean配置 113

3.2.9 ApplicationListener与容器事件 114

3.3 bean的基本配置 116

3.3.1 scope属性 116

3.3.2 parent与abstract 116

3.3.3 factory-bean与factory-method 117

3.3.4 bean的初始化与释放 118

3.4 依赖注入 118

3.4.1 setter注入 118

3.4.2 工厂方式注入 123

3.4.3 构造器注入 124

3.4.4 注解注入 125

3.5 Spring Boot 126

3.5.1 快速创建工程 127

3.5.2 编码与测试 129

3.5.3 打包部署 130

3.5.4 辅助开发工具 131

3.5.5 监控功能 131

3.6 Spring Cloud 132

3.6.1 Spring Cloud简介 132

3.6.2 架构设计 134

3.6.3 创建应用 135

3.6.4 服务的注册与发现 136

3.6.5 服务配置 138

3.6.6 Ribbon负载均衡 140

3.6.7 Feign服务调用 141

3.6.8 Hystrix 142

3.6.9 Zuul服务路由 145

3.6.10 服务监控 146

第4章 动态代理 152

4.1 代理模式 152

4.2 静态代理 154

4.3 类的装载 155

4.4 Java反射 157

4.5 JDK动态代理 162

4.6 CGLIB动态代理 163

4.7 Java Compiler API 164

4.8 Javassist动态代理 170

第5章 对象序列化 173

5.1 什么是序列化 173

5.2 Java序列化 176

5.2.1 基本用法 176

5.2.2 关于serialVersionUID 179

5.2.3 自定义序列化 180

5.2.4 封装实现代码 182

5.3 Hessian序列化 183

5.4 Kryo序列化 186

5.5 FST序列化 190

5.6 其他序列化组件 192

5.7 集成与扩展 193

5.7.1 优雅地集成 193

5.7.2 使用Java SPI 194

5.7.3 使用Spring 196

第6章 框架设计 197

6.1 总体结构 197

6.1.1 逻辑架构 197

6.1.2 框架设计概述 199

6.1.3 RPC原理 202

6.1.4 工程结构 203

6.1.5 依赖的jar包 205

6.1.6 主要的类 206

6.2 初始化过程 208

6.2.1 Spring配置 208

6.2.2 应用节点的启动 210

6.2.3 Web容器的启动 212

6.2.4 RpcCore的初始化 213

6.2.5 RpcContext的初始化 216

6.3 服务的暴露 218

6.3.1 服务暴露配置 218

6.3.2 方法配置与ID 220

6.3.3 内置的服务方法 221

6.3.4 服务提供方本地调用器 224

6.3.5 服务提供方代理生成器 225

6.3.6 注册要暴露的服务 231

6.4 服务的引用 233

6.4.1 服务引用配置 233

6.4.2 本地引用工厂类 234

6.4.3 注册本地引用工厂 235

6.4.4 本地引用与方法ID 236

6.5 服务的注册与发现 238

6.5.1 注册表集合 238

6.5.2 注册表的同步 239

6.5.3 注册表的解析 241

6.5.4 提交注册表 242

6.5.5 注册表推送 245

6.5.6 注册表检查 247

6.6 优雅地停机 249

6.6.1 停机的过程 249

6.6.2 停机钩子 250

6.6.3 监听Web容器的关闭 251

6.6.4 RpcCore的关闭 253

6.6.5 停机通知的处理 256

第7章 方法调用 258

7.1 方法调用类型 258

7.2 同步调用 260

7.2.1 同步调用的时序 260

7.2.2 同步调用的发起 263

7.2.3 负载均衡 265

7.2.4 指定服务提供者 267

7.2.5 失败转移 268

7.2.6 发送调用请求 269

7.2.7 处理调用请求 271

7.2.8 处理调用响应 276

7.3 异步调用 277

7.3.1 异步调用的时序 277

7.3.2 异步调用的发起 278

7.3.3 异步调用的执行 280

7.3.4 方法调用对象 280

7.4 同步/异步通知 286

7.5 异步回调 289

7.6 广播调用与广播通知 290

7.6.1 广播示例 290

7.6.2 广播代码 291

第8章 通信层实现 294

8.1 Socket通信框架 294

8.1.1 Netty与Mina 294

8.1.2 为什么要自己写 295

8.1.3 是NIO还是AIO 296

8.1.4 设计思路 297

8.1.5 实际结构 298

8.2 通信协议 300

8.2.1 传输对象 300

8.2.2 数据包结构 301

8.2.3 拆包与发送 302

8.2.4 接收并组包 309

8.3 连接的建立 317

8.3.1 工作模型 317

8.3.2 开始监听 318

8.3.3 发起连接 320

8.3.4 绑定连接 323

8.3.5 断线检测 325

第9章 性能测试与调优 329

9.1 性能调优概述 329

9.1.1 性能指标 329

9.1.2 性能瓶颈 331

9.1.3 环境因素 332

9.2 压力测试 333

9.2.1 测试方法 333

9.2.2 场景设计 334

9.2.3 测试环境 334

9.2.4 Dubbo配置 335

9.2.5 测试程序 336

9.3 线程池调优 338

9.3.1 调整线程池的大小 338

9.3.2 选择合适的队列 341

9.3.3 线程的管理逻辑 342

9.3.4 选择拒绝策略 344

9.4 优化线程同步 345

9.4.1 减少上下文切换 345

9.4.2 避免线程滥用 346

9.4.3 避免过多的锁 348

9.4.4 synchronized VS Lock 350

9.4.5 缩小锁的范围和粒度 350

9.4.6 线程分析工具 352

9.5 JVM调优 353

9.5.1 堆与栈 353

9.5.2 JVM内存的分代 353

9.5.3 GC分类 355

9.5.4 GC算法 356

9.5.5 分代GC 356

9.5.6 对象的引用 359

9.5.7 内存大小设置 359

9.5.8 内存调优工具 361

9.6 其他优化内容 364

9.6.1 避免使用反射 364

9.6.2 对象池 367

9.6.3 缓冲区队列 370

9.6.4 使用直接内存 370

9.6.5 缓存其他对象 371

9.6.6 协调与平衡 372

第10章 服务治理 374

10.1 服务治理概述 374

10.1.1 什么是服务治理 374

10.1.2 服务治理架构 375

10.1.3 服务治理接口 376

10.2 服务的定义 377

10.2.1 服务识别 377

10.2.2 接口定义 378

10.2.3 版本管理 379

10.2.4 协议适配 383

10.2.5 服务设计 384

10.2.6 服务的实现 385

10.2.7 依赖关系管理 387

10.3 服务的部署 387

10.3.1 服务的部署方式 387

10.3.2 自动化部署 388

10.3.3 服务的热部署 390

10.4 注册与发现 391

10.4.1 WSDL与UDDI 391

10.4.2 ZooKeeper的方案 391

10.4.3 Eureka的方案 393

10.4.4 Consul的方案 394

10.4.5 etcd的方案 395

10.4.6 注册中心集成方案 396

10.5 服务的控制 397

10.5.1 服务状态 397

10.5.2 服务控制 399

10.5.3 服务开关 403

10.5.4 服务模拟 405

10.5.5 黑白名单 410

10.5.6 “踢除”服务提供者 416

10.6 监控与限流 421

10.6.1 TPS监控与限流 421

10.6.2 响应时间的监控 429

10.6.3 调用链的监控 430

10.6.4 资源监控 432