跳到内容
1.潮流
1.1.与应用程序运行的硬件平台相关
1.1.1.编写能充分利用多核处理器能力的软件
1.2.与应用程序的结构相关
1.2.1.反映了互联网应用对可用性日益增长的需求
2.聚合型应用(mashup)
2.1.使用来自多个数据源的内容,将它们聚集在一起,从而简化我们的生活
3.并发
3.1.一种编程属性(重叠地执行)
3.2.在单核的机器上可以执行
4.并行
4.1.执行硬件的属性(同时执行)
5.为支持并发不断演进
5.1.提供了锁(通过synchronized类和方法)、Runnable以及线程
5.2.Java 5又引入了java.util.concurrent包
5.3.Java 7为了使用fork/join实现分而治之算法,新增了java.util.concurrent.RecursiveTask
5.4.Java 8则增加了对流和流的并行处理(依赖于新增的Lambda表达式)的支持
5.5.Java 9提供了对分布式异步编程的显式支持
5.6.Java 9通过“发布-订阅”协议增加了对反应式编程的支持
6.线程以及更高层的抽象
6.1.对并行流的迭代是比显式使用线程更高级的概念
6.2.使用流(Stream)是对一种线程使用模式的抽象
6.3.执行器和线程池
6.3.1.Java 5提供了执行器框架,其思想类似于一个高层的线程池,可以充分发挥线程的能力
6.3.2.能以很低的成本向线程池提交上千个任务,同时保证硬件匹配的任务执行
6.4.使用线程池都比直接操纵线程要好
6.4.1.使用k个线程的线程池只能并发地执行k个任务
6.4.2.超限的任务会被加入等待队列,直到现有任务执行完毕才会重新调度空闲线程去执行新任务
6.5.严格fork/join
6.5.1.线程创建以及与其匹配的join()在调用返回的嵌套方法调用中都以嵌套的方式成对出现
6.5.2.无论什么时候,任何任务(或者线程)在方法调用中启动时,都会在其返回之前调用同一个方法
6.6.非嵌套方法调用
7.同步及异步API
7.1.同步API变为异步API
7.1.1.方法不再在物理返回其调用者的同时返回它的执行结果
7.1.2.被调用函数可以在返回结果就绪之前物理上提前返回调用函数
7.1.3.方法异步化(在完成它们的工作之前返回)能提升程序的并发度,其可以与用于循环结构的优化进行互补
7.2.Future风格的API
7.2.1.使用Java Future的改进版本
7.3.反应式风格的API
7.3.1.使用Java 9 java.util.concurrent.Flow接口的反应式编程风格
7.4.有害的睡眠及其他阻塞式操作
7.4.1.线程池中的任务即便是处于睡眠状态,也会阻塞其他任务的执行
7.4.2.它们无法停止已经分配了线程的任务,因为这些任务的调度是由操作系统管理的
8.“线框-管道”模型
8.1.box-and-channel
8.2.可以对异步系统进行可视化
8.3.设计和理解并发系统最好的方式是使用图形
9.反应式系统
9.1.一个程序,其架构很灵活,可以在运行时调整以适应变化的需求
9.2.响应性
9.2.1.不能因为正在替某人处理一个大型任务就延迟其他用户的查询请求,它必须实时地对输入进行响应
9.3.韧性
9.3.1.不能因为某个组件失效就无法提供服务
9.4.弹性
9.4.1.系统可以调整以适应工作负荷的变化,持续高效地运行
9.5.消息驱动
9.5.1.基于线框-管道模型提供了内部API,组件等待要处理的输入,处理结果通过消息发送给其他的组件
10.Future和CompletableFuture
10.1.思维模式是计算的执行是独立且并发的
10.2.Future是一个一次性对象,它只能从头到尾执行代码一次
11.反应式编程
11.1.思维模式是类Future的对象随着时间的推移可以产生很多的结果
12.发布-订阅”的模型
12.1.pub-sub
12.2.订阅者可以订阅的发布者
12.3.名为订阅的连接
12.4.消息(也叫事件),它们通过连接传输
12.5.数据的流动是从发布者(生产者)流向订阅者(消费者)
12.5.1.向上流(upstream)
12.5.2.向下流(downstream)
12.6.提供了对onError和onComplete方法的支持
12.6.1.比传统的观察者模式更加强大
12.7.背压
12.7.1.流量控制
12.8.压力