线程池笔记

一个线程池参数为core 7 ,max 20 ,queue:50,100个并发进来怎么分配。
答:7个会立即执行,50个会进入队列,再开13个进程执行。剩下的30个使用拒绝策略,拒绝执行。

1、创建异步对象

CompletableFuture 提供了四个静态方法来创建一个异步操作。
1、runXxxx 都是没有返回结果的,supplyXxx 都是可以获取返回结果的
2、可以传入自定义的线程池,否则就用默认的线程池;
在这里插入图片描述

2、计算完成时回调方法

whenComplete 可以处理正常和异常的计算结果,exceptionally 处理异常情况。
whenComplete 和 whenCompleteAsync 的区别:
whenComplete:是执行当前任务的线程执行继续执行 whenComplete 的任务。
whenCompleteAsync:是执行把 whenCompleteAsync 这个任务继续提交给线程池
来进行执行。
方法不以 Async 结尾,意味着 Action 使用相同的线程执行,而 Async 可能会使用其他线程
执行(如果是使用相同的线程池,也可能会被同一个线程选中执行)
3、handle 方法
和 complete 一样,可对结果做最后的处理(可处理异常),可改变返回值。

4、线程串行化方法

thenApply 方法:当一个线程依赖另一个线程时,获取上一个任务返回的结果,并返回当前
任务的返回值。
thenAccept 方法:消费处理结果。接收上一步的处理结果,并消费处理,无返回结果。
thenRun 方法:不能获取上一步的结果,只要上面的任务执行完成,就开始执行 thenRun,只是处理完任务后,执行
thenRun 的后续操作
带有 Async 默认是异步执行的。同之前。
以上都要前置任务成功完成。
Function<? super T,? extends U>
T:上一个任务返回结果的类型

5、两任务组合 - 都要完成

两个任务必须都完成,触发该任务。
thenCombine:组合两个 future,能获取两个 future 的返回结果,并返回当前任务的返回值
thenAcceptBoth:组合两个 future,能获取两个 future 任务的返回结果,然后处理任务,没有
返回值。
runAfterBoth:组合两个 future,不能获取 future 的结果,只需两个 future 处理完任务后,没有返回值,
处理该任务。

6、两任务组合 - 一个完成 A or B -> C

当两个任务中,任意一个 future 任务完成的时候,执行任务。
applyToEither:两个任务有一个执行完成,能获取它的返回值,处理任务并有新的返回值
acceptEither:两个任务有一个执行完成,能获取它的返回值,处理任务,没有新的返回值
runAfterEither:两个任务有一个执行完成,不能获取 future 的结果,处理任务,也没有返
回值。

7、多任务组合

allOf:等待所有任务完成
anyOf:只要有一个任务完成
在这里插入图片描述

笔记来源 尚硅谷谷粒商城

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值