异步编程概览

新线程的实现

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable [+ FutureTask]
  4. 利用线程池

线程池实现类

  • ThreadPoolExecutor实现类继承自AbstractExecutorService抽象类
  • AbstractExecutorService实现了ExecutorService接口
  • ExecutorService接口继承了Executor接口

参数

  1. 核心线程数 (corePoolSize)
  2. 最大线程数量(maximumPoolSize)
  3. 多余线程存活时间(keepAliveTIme)
  4. 时间单位(unit)
  5. 阻塞队列(workQueue)
  6. 线程工厂(threadFactory)
  7. 拒绝策略(handler)

拒绝策略

  1. 抛出异常(AbortPolicy),默认
  2. 直接抛弃(DiscardPolicy)
  3. 丢弃队列中最早的任务(DiscardOldestPolicy)
  4. 使用当前线程执行(CallerRunsPolicy)

工作流程

  1. 如果核心线程数未满,直接利用核心线程执行,否则转下步
  2. 如果阻塞队列未满,直接进入阻塞队列,否则转下步
  3. 如果最大线程数未满,直接创建新线程执行任务,否则执行拒绝策略

异步类

相关实现关系

  • FutureTask类实现了RunnableFuture接口
  • RunnableFuture接口继承了Runnable和Future接口
  • CompletableFuture类实现了Future和CompletionStage接口

回调方法

  1. whenComplete (当前任务成功完成后获取返回值和异常) 和 whenCompleteAsync (异步获取)
  2. exceptionally (设定当出现异常返回的默认值)
  3. handle (接收返回值和异常进行处理)

串行化

  • thenApply (接收上一步的返回值并有返回值)
  • thenApplyAsync
  • thenAccept (接收上一步的返回值无返回值)
  • thenAcceptAsync
  • thenRun (直接执行下一步的任务)
  • thenRunAsync

组合任务-都完成

  • thenCompose (组合两个future,并将前一个任务的返回结果作为下一个任务的参数,存在先后顺序)
  • thenCombine (组合两个future,获取它们的返回值,并返回当前任务的返回值)
  • thenCombineAsync
  • thenAcceptBoth (组合两个future,获取它们的返回值,没有返回值)
  • thenAcceptBothAsync
  • runAfterBoth (组合两个future,不需要返回值直接处理)
  • runAfterBothAsync

组合任务-任意一个完成

  • applyToEither (组合两个future,任意一个完成获取它的返回值,并返回当前任务的返回值)
  • applyToEitherAsync
  • acceptEither (组合两个future,获取一个future的返回值,并且没有返回值)
  • acceptEitherAsync
  • runAfterEither (组合两个future,有一个完成后直接处理,并且没有返回值)
  • runAfterEitherAsync

多任务组合

  • allOf (等待所有任务完成)
  • anyOf(任意一个任务完成则结束)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值