关于程序员,除了做项目来提高自身的技术之外,还有一种提升自己的专业技能就是:多!看!书!
Java高并发程序设计
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
第一章:走入并行世界
第一章主要介绍了并行计算相关的一些基本概念,树立读者对并行计算的基本认识;介绍了两个重要的并行性能评估定律,以及Java内存模型JMM。
1.1 何去何从的并行计算
1.2 你必须知道的几个概念
1.3 并发级别
1.4 有关并行的两个重要定律
1.5 回到Java:JMM
第二章:Java并行程序基础
第二章介绍了Java并行程序开发的基础,包括Java中Thread的基本使用方法等,也详细介绍了并行程序容易引发的一些错误和误用
2.1 有关线程你必须知道的事
2.2 初始线程:线程的基本操作
2.3 volatile与Java内存模型(JMM)
2.4 分门别类的管理:线程组
2.5 驻守后台:守护线程(Daemon)
2.6 先干重要的事:线程优先级
2.7 线程安全的概念与synchronized
2.8 程序中的幽灵:隐蔽的错误
第三章:第3章 JDK并发包
第三章介绍了JDK内部对并行程序开发的支持,主要介绍JUC中一些工具的使用方法、各自特点及他们的内部实现原理
3.1 多线程的团队协作:同步控制
3.2 线程复用:线程池
3.3 不要重复发明轮子:JDK的并发容器
第四章:锁的优化及注意事项
第四章介绍了在开发过程中可以进行的对锁的优化,也进一步简要描述了Java虚拟机层面对并行程序的优化支持。此外,还花费了一定篇幅介绍了有关无锁的计算
4.1 有助于提高“锁”性能的几点建议
4.2 Java虚拟机对锁优化所做的努力
4.3 人手一支笔:ThreadLocal
4.4 无锁
4.5 有关死锁的问题
第五章:并行模式与算法
第五章介绍了并行程序设计中常见的一些设计模式以及一些典型的并行算法和使用方法,其中包括重要的Java NIO和AIO的介绍
5.1 探讨单例模式
5.2 不变模式
5.3 生产者-消费者模式
5.4 高性能的生产者-消费者:无锁的实现
5.5 Future模式
5.6 并行流水线
5.7 并行搜索
5.8 并行排序
5.9 并行算法:矩阵乘法
5.10 准备好了再通知我:网络NIO
5.11 读完了再通知我:AIO
第六章:Java 8与并发
第六章介绍了Java 8 中为并行计算做的新的改进,包括并行流、CompletableFuture、StampedLock 和 LongAdder。
6.1 Java 8的函数式编程简介
6.2 函数式编程基础
6.3 一步一步走入函数式编程
6.4 并行流与并行排序
6.5 增强的Future:CompletableFuture
6.6 读写锁的改进:StampedLock
6.7 原子类的增强
第七章:使用Akka构建高并发程序
第七章主要介绍了高并发框架Akka的基本使用方法,并使用Akka框架实现了一个简单的粒子群算法,模拟超高并发的场景
7.1 新并发模型:Actor
7.2 Akka之Hello World
7.3 有关消息投递的一些说明
7.4 Actor的生命周期
7.5 监督策略
7.6 选择Actor
7.7 消息收件箱(Inbox)
7.8 消息路由
7.9 Actor的内置状态转换
7.10 询问模式:Actor中的Future
7.11 多个Actor同时修改数据:Agent
7.12 像数据库一样操作内存数据:软件事务内存
7.13 一个有趣的例子:并发粒子群的实现
第八章:并行程序调试
第八章介绍了使用eclipse进行多线程调试的方法,并演示了通过eclipse进行多线程调试重现ArrayList 的线程不安全问题
8.1 准备实验样本
8.2 正式起航
8.3 挂起整个虚拟机
8.4 调试进入ArrayList内部