当前位置:网站首页>异步编程概览
异步编程概览
2022-08-04 13:48:00 【WihauShe】
新线程的实现
- 继承Thread类
- 实现Runnable接口
- 实现Callable [+ FutureTask]
- 利用线程池
线程池实现类
- ThreadPoolExecutor实现类继承自AbstractExecutorService抽象类
- AbstractExecutorService实现了ExecutorService接口
- ExecutorService接口继承了Executor接口
参数
- 核心线程数 (corePoolSize)
- 最大线程数量(maximumPoolSize)
- 多余线程存活时间(keepAliveTIme)
- 时间单位(unit)
- 阻塞队列(workQueue)
- 线程工厂(threadFactory)
- 拒绝策略(handler)
拒绝策略
- 抛出异常(AbortPolicy),默认
- 直接抛弃(DiscardPolicy)
- 丢弃队列中最早的任务(DiscardOldestPolicy)
- 使用当前线程执行(CallerRunsPolicy)
工作流程
- 如果核心线程数未满,直接利用核心线程执行,否则转下步
- 如果阻塞队列未满,直接进入阻塞队列,否则转下步
- 如果最大线程数未满,直接创建新线程执行任务,否则执行拒绝策略
异步类
相关实现关系
- FutureTask类实现了RunnableFuture接口
- RunnableFuture接口继承了Runnable和Future接口
- CompletableFuture类实现了Future和CompletionStage接口
回调方法
- whenComplete (当前任务成功完成后获取返回值和异常) 和 whenCompleteAsync (异步获取)
- exceptionally (设定当出现异常返回的默认值)
- 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(任意一个任务完成则结束)
边栏推荐
- 节省50%成本!京东云重磅发布新一代混合CDN产品
- 相似文本聚类与调参
- 干掉visio,这个画图神器真的绝了
- State security organs conduct criminal arrest and summons review on Yang Zhiyuan, a suspect suspected of endangering national security
- 荧光磷脂PEG衍生物之一磷脂-聚乙二醇-荧光素,Fluorescein-PEG-DSPE
- js深拷贝和浅拷贝具体使用区别_es6深拷贝和浅拷贝
- AutoCAD DWG,DXF文件导出高清图片、PDF
- sqlplus报错ORA-12547: TNS:lost contact解决
- 用过Apifox这个API接口工具后,确实感觉postman有点鸡肋......
- LeetCode_643_子数组的最大平均数Ⅰ
猜你喜欢

This article sorts out the development of the main models of NLP

Interviewer: How to view files containing abc string in /etc directory?

State security organs conduct criminal arrest and summons review on Yang Zhiyuan, a suspect suspected of endangering national security

如何查找endnote文献中pdf文件的位置

SCA兼容性分析工具(ORACLE/MySQL/DB2--->MogDB/openGauss/PostgreSQL)

企业应当实施的5个云安全管理策略

zabbix自定义图形

从理论到实践:MySQL性能优化和高可用架构,一次讲清

到底什么是真正的HTAP?
将 Sentinel 熔断限流规则持久化到 Nacos 配置中心
随机推荐
Is the code more messy?That's because you don't use Chain of Responsibility!
如何才能有效、高效阅读?猿辅导建议“因材因时施教”
Map common traversal methods - keySet and entrySet
k8s上安装mysql
节省50%成本!京东云重磅发布新一代混合CDN产品
LeetCode_3_无重复字符的最长子串
JSX use
博途1200/1500PLC斜坡指令RAMP(带暂停功能)
This article sorts out the development of the main models of NLP
Unity 3D模型展示框架篇之资源打包、加载、热更(Addressable Asset System | 简称AA)
FreeConfig.h文件
PMP每日一练 | 考试不迷路-8.4(包含敏捷+多选)
项目里的各种配置,你都了解吗?
js深拷贝和浅拷贝具体使用区别_es6深拷贝和浅拷贝
LeetCode 1403 Minimum subsequence in non-increasing order [greedy] HERODING's LeetCode road
Win11快速助手在哪里?Win11打开快速助手的方法
如何通过使用“缓存”相关技术,解决“高并发”的业务场景案例?
阿里老鸟终于把测试用例怎么写说的明明白白了,小鸟必看
oracle+RAC+linux5.1所需要安装的包
面试官:如何查看/etc目录下包含abc字符串的文件?