CompletableFuture-FutureTask结合线程池提升性能

使用线程池:

返回计算结果:


2.2.3 Future编码实战和优缺点分析

优点:Future+线程池异步多线程任务配合,能显著提高程序的运行效率。

缺点:

get()阻塞---一旦调用get()方法求结果,一旦调用不见不散,非要等到结果才会离开,不管你是否计算完成,如果没有计算完成容易程序堵塞。

isDone()轮询---轮询的方式会耗费无谓的cpu资源,而且也不见得能及时得到计算结果,如果想要异步获取结果,通常会以轮询的方式去获取结果,尽量不要阻塞。

结论:Future对于结果的获取不是很友好,只能通过阻塞或轮询的方式得到任务的结果。

正常情况:


get()阻塞:

main线程被阻塞了,futureTask.get() 后过了5秒才打印main ----忙其它任务了


设置 futureTask.get() 3秒钟,过时不候

非常粗暴,直接抛异常,不建议使用

相关推荐
bytebeats2 分钟前
Java 21 虚拟线程 - 兄嘚, 我的锁呢?
java
随缘而动,随遇而安7 分钟前
第七十四篇 高并发场景下的Java并发容器:用生活案例讲透技术原理
java·大数据·后端
weixin_4365250736 分钟前
Spring Boot 实现流式响应(兼容 2.7.x)
java·spring boot·后端
源码超级联盟42 分钟前
分享一个空指针的bug
java·后端
weixin_429326091 小时前
Spring Boot-面试题(52)
java·spring boot·后端
代码丰2 小时前
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
java·分布式·lua
风象南2 小时前
SpringBoot离线应用的5种实现方式
java·spring boot·后端
张哈大2 小时前
【 java 集合知识 第二篇 】
java·开发语言·笔记·哈希算法
潮流coder2 小时前
mybatis的if判断==‘1‘不生效,改成‘1‘.toString()才生效的原因
java·tomcat·mybatis
青临的踩坑之路3 小时前
Docker + Nginx + Logrotate 日志管理与轮换实践
java·开发语言