万本电子书0元读

万本电子书0元读

顶部广告

精通Java并发编程(第2版)电子书

Java性能卓越,有一套非常强大的并发API,其中包含大量随时可用又极其灵活的元素,可用于轻松实现任何类型的并发应用程序。 本书从并发处理的视角探讨Java编程。首先详细介绍了并发应用程序的设计原理,阐述了如何对串行算法行并行化处理。然后介绍了Thread类和Runnable口,它们是Java并发API的重要组成部分。着讨论了如何利用Java并发API的各种元素,以及如何在强大的真实并发应用程序中实现它们。*后详细介绍了测试并发Java应用程序的工具和技巧,概要介绍了JVM中的其他并发机制。

售       价:¥

纸质售价:¥61.40购买纸书

365人正在读 | 0人评论 6.5

作       者:(西)哈维尔·费尔南德斯·冈萨雷斯

出  版  社:人民邮电出版社

出版时间:2018-10-01

字       数:36.2万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
Java 提供了一套非常强大的并发API,可以轻松实现任何类型的并发应用程序。本书讲述Java 并发API *重要的元素,包括执行器框架、Phaser 类、Fork/Join 框架、流API、并发数据结构、同步机制,并展示如何在实际发中使用它们。此外,本书还介绍了设计并发应用程序的方法论、设计模式、实现良好并发应用程序的提示和技巧、测试并发应用程序的工具和方法,以及如何使用面向Java 虚拟机的其他编程语言实现并发应用程序。<br/>【推荐语】<br/>Java性能卓越,有一套非常强大的并发API,其中包含大量随时可用又极其灵活的元素,可用于轻松实现任何类型的并发应用程序。 本书从并发处理的视角探讨Java编程。首先详细介绍了并发应用程序的设计原理,阐述了如何对串行算法行并行化处理。然后介绍了Thread类和Runnable口,它们是Java并发API的重要组成部分。着讨论了如何利用Java并发API的各种元素,以及如何在强大的真实并发应用程序中实现它们。*后详细介绍了测试并发Java应用程序的工具和技巧,概要介绍了JVM中的其他并发机制。 - 掌握并发应用程序必须遵循的原则 - 并行化串行算法以提升性能,同时不会导致数据不一致和死锁 - 充分利用Java并发API的所有元素 - 利用执行器将线程管理与应用程序的其他部分隔离来 - 使用Phaser类并发执行可分为多个阶段的任务 - 通过Fork/Join框架,利用并行版分治设计范式解决问题 - 使用并行流和反应流 - 实现MapReduce和MapCollect模型 - 控制Java并发API提供的并发数据结构和同步机制 - 为数据挖掘、机器学习等实际问题实现高效解决方案<br/>【作者】<br/>哈维尔·费尔南德斯·冈萨雷斯(Javier Fernández González):软件架构师,拥有十余年Java研发经验,对J2EE、Struts框架和使用Java发大规模数据处理的应用程序颇有心得,为保险、医疗、交通等领域客户发了许多J2EE Web应用程序。<br/>
目录展开

译者序

前言

第1章 第一步:并发设计原理

1.1 基本的并发概念

1.1.1 并发与并行

1.1.2 同步

1.1.3 不可变对象

1.1.4 原子操作和原子变量

1.1.5 共享内存与消息传递

1.2 并发应用程序中可能出现的问题

1.2.1 数据竞争

1.2.2 死锁

1.2.3 活锁

1.2.4 资源不足

1.2.5 优先权反转

1.3 设计并发算法的方法论

1.3.1 起点:算法的一个串行版本

1.3.2 第1步:分析

1.3.3 第2步:设计

1.3.4 第3步:实现

1.3.5 第4步:测试

1.3.6 第5步:调整

1.3.7 结论

1.4 Java并发API

1.4.1 基本并发类

1.4.2 同步机制

1.4.3 执行器

1.4.4 Fork/Join框架

1.4.5 并行流

1.4.6 并发数据结构

1.5 并发设计模式

1.5.1 信号模式

1.5.2 会合模式

1.5.3 互斥模式

1.5.4 多元复用模式

1.5.5 栅栏模式

1.5.6 双重检查锁定模式

1.5.7 读-写锁模式

1.5.8 线程池模式

1.5.9 线程局部存储模式

1.6 设计并发算法的提示和技巧

1.6.1 正确识别独立任务

1.6.2 在尽可能高的层面上实施并发处理

1.6.3 考虑伸缩性

1.6.4 使用线程安全API

1.6.5 绝不要假定执行顺序

1.6.6 在静态和共享场合尽可能使用局部线程变量

1.6.7 寻找更易于并行处理的算法版本

1.6.8 尽可能使用不可变对象

1.6.9 通过对锁排序来避免死锁

1.6.10 使用原子变量代替同步

1.6.11 占有锁的时间尽可能短

1.6.12 谨慎使用延迟初始化

1.6.13 避免在临界段中使用阻塞操作

1.7 小结

第2章 使用基本元素:Thread和Runnable

2.1 Java中的线程

2.1.1 Java中的线程:特征和状态

2.1.2 Thread类和Runnable接口

2.2 第一个例子:矩阵乘法

2.2.1 公共类

2.2.2 串行版本

2.2.3 并行版本

2.3 第二个例子:文件搜索

2.3.1 公共类

2.3.2 串行版本

2.3.3 并发版本

2.3.4 对比解决方案

2.4 小结

第3章 管理大量线程:执行器

3.1 执行器简介

3.1.1 执行器的基本特征

3.1.2 执行器框架的基本组件

3.2 第一个例子:k-最近邻算法

3.2.1 k-最近邻算法:串行版本

3.2.2 k-最近邻算法:细粒度并发版本

3.2.3 k-最近邻算法:粗粒度并发版本

3.2.4 对比解决方案

3.3 第二个例子:客户端/服务器环境下的并发处理

3.3.1 客户端/服务器:串行版

3.3.2 客户端/服务器:并行版本

3.3.3 额外的并发服务器组件

3.3.4 对比两种解决方案

3.3.5 其他重要方法

3.4 小结

第4章 充分利用执行器

4.1 执行器的高级特性

4.1.1 任务的撤销

4.1.2 任务执行调度

4.1.3 重载执行器方法

4.1.4 更改一些初始化参数

4.2 第一个例子:高级服务器应用程序

4.2.1 ServerExecutor类

4.2.2 命令类

4.2.3 服务器部件

4.2.4 客户端部件

4.3 第二个例子:执行周期性任务

4.3.1 公共部件

4.3.2 基础阅读器

4.3.3 高级阅读器

4.4 有关执行器的其他信息

4.5 小结

第5章 从任务获取数据:Callable接口与Future接口

5.1 Callable接口和Future接口简介

5.1.1 Callable接口

5.1.2 Future接口

5.2 第一个例子:单词最佳匹配算法

5.2.1 公共类

5.2.2 最佳匹配算法:串行版本

5.2.3 最佳匹配算法:第一个并发版本

5.2.4 最佳匹配算法:第二个并发版本

5.2.5 单词存在算法:串行版本

5.2.6 单词存在算法:并行版本

5.2.7 对比解决方案

5.3 第二个例子:为文档集创建倒排索引

5.3.1 公共类

5.3.2 串行版本

5.3.3 第一个并发版本:每个文档一个任务

5.3.4 第二个并发版本:每个任务多个文档

5.3.5 对比解决方案

5.3.6 其他相关方法

5.4 小结

第6章 运行分为多阶段的任务:Phaser类

6.1 Phaser类简介

6.1.1 参与者的注册与注销

6.1.2 同步阶段变更

6.1.3 其他功能

6.2 第一个例子:关键字抽取算法

6.2.1 公共类

6.2.2 串行版本

6.2.3 并发版本

6.2.4 对比两种解决方案

6.3 第二个例子:遗传算法

6.3.1 公共类

6.3.2 串行版本

6.3.3 并发版本

6.3.4 对比两种解决方案

6.4 小结

第7章 优化分治解决方案:Fork/Join框架

7.1 Fork/Join框架简介

7.1.1 Fork/Join框架的基本特征

7.1.2 Fork/Join框架的局限性

7.1.3 Fork/Join框架的组件

7.2 第一个例子:k-means聚类算法

7.2.1 公共类

7.2.2 串行版本

7.2.3 并发版本

7.2.4 对比解决方案

7.3 第二个例子:数据筛选算法

7.3.1 公共特性

7.3.2 串行版

7.3.3 并发版本

7.3.4 对比两个版本

7.4 第三个例子:归并排序算法

7.4.1 共享类

7.4.2 串行版本

7.4.3 并发版本

7.4.4 对比两个版本

7.5 Fork/Join框架的其他方法

7.6 小结

第8章 使用并行流处理大规模数据集:MapReduce模型

8.1 流的简介

8.1.1 流的基本特征

8.1.2 流的组成部分

8.1.3 MapReduce与MapCollect

8.2 第一个例子:数值综合分析应用程序

8.2.1 并发版本

8.2.2 串行版本

8.2.3 对比两个版本

8.3 第二个例子:信息检索工具

8.3.1 约简操作简介

8.3.2 第一种方式:全文档查询

8.3.3 第二种方式:约简的文档查询

8.3.4 第三种方式:生成一个含有结果的HTML文件

8.3.5 第四种方式:预先载入倒排索引

8.3.6 第五种方式:使用我们的执行器

8.3.7 从倒排索引获取数据:ConcurrentData类

8.3.8 获取文件中的单词数

8.3.9 获取文件的平均tfxidf值

8.3.10 获取索引中的最大tfxidf值和最小tfxidf值

8.3.11 ConcurrentMain类

8.3.12 串行版

8.3.13 对比两种解决方案

8.4 小结

第9章 使用并行流处理大规模数据集:MapCollect模型

9.1 使用流收集数据

collect()方法

9.2 第一个例子:无索引条件下的数据搜索

9.2.1 基本类

9.2.2 第一种方式:基本搜索

9.2.3 第二种方式:高级搜索

9.2.4 本例的串行实现

9.2.5 对比实现方案

9.3 第二个例子:推荐系统

9.3.1 公共类

9.3.2 推荐系统:主类

9.3.3 ConcurrentLoaderAccumulator类

9.3.4 串行版

9.3.5 对比两个版本

9.4 第三个例子:社交网络中的共同联系人

9.4.1 基本类

9.4.2 并发版本

9.4.3 串行版本

9.4.4 对比两个版本

9.5 小结

第10章 异步流处理:反应流

10.1 Java反应流简介

10.1.1 Flow.Publisher接口

10.1.2 Flow.Subscriber接口

10.1.3 Flow.Subscription接口

10.1.4 SubmissionPublisher类

10.2 第一个例子:面向事件通知的集中式系统

10.2.1 Event类

10.2.2 Producer类

10.2.3 Consumer类

10.2.4 Main类

10.3 第二个例子:新闻系统

10.3.1 News类

10.3.2 发布者相关的类

10.3.3 Consumer类

10.3.4 Main类

10.4 小结

第11章 探究并发数据结构和同步工具

11.1 并发数据结构

11.1.1 阻塞型数据结构和非阻塞型数据结构

11.1.2 并发数据结构

11.1.3 使用新特性

11.1.4 原子变量

11.1.5 变量句柄

11.2 同步机制

11.2.1 CommonTask类

11.2.2 Lock接口

11.2.3 Semaphore类

11.2.4 CountDownLatch类

11.2.5 CyclicBarrier类

11.2.6 CompletableFuture类

11.3 小结

第12章 测试与监视并发应用程序

12.1 监视并发对象

12.1.1 监视线程

12.1.2 监视锁

12.1.3 监视执行器

12.1.4 监视Fork/Join框架

12.1.5 监视Phaser

12.1.6 监视流API

12.2 监视并发应用程序

12.2.1 Overview选项卡

12.2.2 Memory选项卡

12.2.3 Threads选项卡

12.2.4 Classes选项卡

12.2.5 VM Summary选项卡

12.2.6 MBeans选项卡

12.2.7 About选项卡

12.3 测试并发应用程序

12.3.1 使用MultithreadedTC测试并发应用程序

12.3.2 使用Java Pathfinder测试并发应用程序

12.4 小结

第13章 JVM中的并发处理:Clojure、带有GPars库的Groovy以及Scala

13.1 Clojure的并发处理

13.1.1 使用Java元素

13.1.2 引用类型

13.1.3 Ref对象

13.1.4 Delay

13.1.5 Future

13.1.6 Promise

13.2 Groovy及其GPars库的并发处理

13.3 软件事务性内存

13.3.1 使用Java元素

13.3.2 数据并行处理

13.3.3 Fork/Join处理

13.3.4 Actor

13.3.5 Agent

13.3.6 Dataflow

13.4 Scala的并发处理

13.4.1 Scala中的Future对象

13.4.2 Promise

13.5 小结

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部