首页 > 编程语言 >读Java实战(第二版)笔记14_CompletableFuture及反应式编程背后的概念

读Java实战(第二版)笔记14_CompletableFuture及反应式编程背后的概念

时间:2023-02-19 07:22:04浏览次数:49  
标签:Java 14 编程 任务 API CompletableFuture 反应式 线程

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. 压力

标签:Java,14,编程,任务,API,CompletableFuture,反应式,线程
From: https://www.cnblogs.com/lying7/p/17122414.html

相关文章

  • Java语法基础
    关键字和保留字enum:用于定义一组固定的常量(枚举)。abstract:用于声明抽象类,以及抽象方法。break:用于中断循环或switch语句。catch:用于捕获try语句中的异......
  • Java数组&字符串
    Java数组数组是一个对象,它包含了一组固定数量的元素,并且这些元素的类型是相同的。数组会按照索引的方式将元素放在指定的位置上,意味着我们可以通过索引来访问这些元素。在......
  • JavaWeb基本概念
    JavaWeb1、基本概念1.1、前言web开发:web,网页的意思,www.baidu.com静态webhtml,css提供给所有人看的数据始终不会发生变化动态web提供给所有人看的数......
  • javascript & Uncaught TypeError: arr is not iterable bug All In One
    javascript&UncaughtTypeError:arrisnotiterablebugAllInOnefunctioncompute(arr){const[left,symbol,right]=arr;switch(symbol){......
  • PAT-basic-1026 程序运行时间 java
    一、题目要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单......
  • 2月18日的java学习
    2月18日的java学习java的类型原则基本类型(除浮点型)逐渐变大之后先float后double,容器逐渐变大低到高为自动,高到低为强制转换过程中会发生内存泄漏,或者精度丢失......
  • 漏洞分析-存储型XSS-JAVA篇
    0x00原理分析存储型XSS:用户在浏览器传入的数据未做校验,导致一些恶意的前端代码被插入至数据库中,前端再次读取数据时,数据被当成前端代码,或与前端代码拼接并执行。0x01效......
  • 【2023-02-14】夫妻真相
    20:00要善于珍惜爱情,年代愈久,愈要加倍珍惜。爱情不是月光下的散步,也不是长凳上的叹息。爱情中会有冯波和雨雪,因为一辈子要生活在一起!爱情正像一首好歌,可是编一首好歌却不......
  • java面向对象
    java面向对象以类的方式组织代码,以对象的组织(封装)程序。一个类里面只有方法和属性一个项目至多只有一个main方法创建对象类是抽象的,需要进行实例化publicclass......
  • 算法刷题-字符串排序-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......