CompletableFuture底层支撑的是一个线程池嘛?

今天我们来讲一下CompletableFuture为什么可以做到异步,探讨一下源码。

现在我先写一个小demo案例,是去获取天气预报的数据。

这是一个很简单的例子。

然后我们使用CompletableFuture去调用执行这个方法。

我们先看看运行结果:

可以发现main线程先执行,也就证明这确实是一个异步线程。

接下来我们看看这个supplyAsync()方法的源码。

点进去:

继续点进去:

我们可以看到这一行代码:

调用了e.excute();e就是一个Executor,其实就是一个执行器,我们继续返回刚刚上一个方法

supplyAsync(),发现这个值是ASYNC_POOL,我们去追溯一下。

这个值是一个三元运算符,如果USE_COMMON_POOL是true的话,ASYNC_POOL就等于ForkJoinPool.commonPool();那么我们就看看USE_COMMON_POOL的值是多少。

如果ForkJoinPool.getCommonPoolParallelism()  > 1 的话,USE_COMMON_POOL就是true了,如果为true的话,ASYNC_POOL的值就是ForkJoinPool.commonPool()。

那么我们现在直接在代码中调用一下值是多少。

值是15,> 1 ,说明USE_COMMON_POOL是true,那就证明调用了ForkJoinPool.commonPool()的方法,我们看看这个方法又是如何样的。

返回了一个ForkJoinPool对象

看看这个对象是啥意思。

所以其实ForkJoinPool就是一个线程池。

总结:

CompletableFuture底层默认使用的是ForkJoinPool线程池。

最后:

如果大家觉得这篇文章对你们有所帮助的话,麻烦给个免费的赞赞,也祝各位码农在IT路上越走越远,高歌猛进!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值