• 异步编程概览


    新线程的实现

    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(任意一个任务完成则结束)
  • 相关阅读:
    如何使用Node编写开发小工具
    前端使用jsencrypt进行RSA公钥解密
    【宝塔面板建站】本地连接云服务器的数据库 以阿里云服务器为例子(保姆级图文)
    C++ Qt项目实战:构建高效的代码管理器
    教你怎么爬元气桌面的壁纸和视频
    初识Tomcat
    【Docker安装部署DockerCompose&案例演示&配置文件&命令实操学习】
    并查集(Union-Find)
    RMAN备份数据库_重启RMAN备份
    向毕业妥协系列之机器学习笔记:高级学习算法-神经网络(二)
  • 原文地址:https://blog.csdn.net/qq_39376697/article/details/126062631