CompletableFuture异步编程

本文详细介绍了Java中的CompletableFuture,包括其默认使用的ForkJoinPool线程池以及如何避免线程饥饿。文章重点讲解了CompletionStage接口,阐述了串行、AND汇聚和OR汇聚三种任务执行关系,并通过示例代码展示了如何使用thenApply、thenAccept、thenRun、thenCompose等方法实现异步任务的组合与控制。
摘要由CSDN通过智能技术生成
  1. 默认情况下CompletableFuture会使用公共的ForkJoinPool线程池,这个线程池默认创建的线程数是CPU的 核数(也可以通过JVM option:-Djava.util.concurrent.ForkJoinPool.common.parallelism来设置ForkJoinPool 线程池的线程数)。如果所有CompletableFuture共享一个线程池,那么一旦有任务执行一些很慢的I/O操 作,就会导致线程池中所有线程都阻塞在I/O操作上,从而造成线程饥饿,进而影响整个系统的性能。所以,强烈建议你要根据不同的业务类型创建不同的线程池,以避免互相干扰。

  2. 创建完CompletableFuture对象之后,会自动地异步执行runnable.run()方法或者supplier.get()方法。因为CompletableFuture类实现了Future接口,所以这两个问题你都可以通过Future接口来解决。另外,CompletableFuture类还实现了CompletionStage接口。

常用API
  • public T get():获取计算结果, 该方法为阻塞方法会等待计算结果完成。

  • public T get(long timeout,TimeUnit unit):有时间限制的阻塞方法

  • public T getNow(T valueIfAbsent)立即获取方法结果,如果没有计算结束则返回传的值

  • public T join()和 get() 方法类似也是主动阻塞线程,等待计算结果。和get() 方法有细微的差别。

  • publ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值