首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

completableFuture whenComplete奇怪的行为

CompletableFuture是Java 8引入的一个类,用于支持异步编程和处理异步任务的结果。CompletableFuture类提供了丰富的方法来处理异步任务的结果,其中之一就是whenComplete方法。

whenComplete方法是CompletableFuture类中的一个回调方法,它接收一个BiConsumer参数,用于处理异步任务的结果和异常。当异步任务完成时(无论是正常完成还是异常完成),whenComplete方法都会被调用。

当异步任务正常完成时,whenComplete方法会接收到任务的结果和null作为参数。我们可以在whenComplete方法中对任务的结果进行处理,例如打印结果、保存结果等。

当异步任务异常完成时,whenComplete方法会接收到null和任务的异常作为参数。我们可以在whenComplete方法中对异常进行处理,例如打印异常信息、记录日志等。

CompletableFuture的whenComplete方法的行为可能会被认为是奇怪的,因为它不会阻塞主线程,而是在异步任务完成后立即执行。这意味着当主线程调用whenComplete方法时,它会继续执行后续的代码,而不会等待异步任务的完成。

当然,CompletableFuture类还提供了许多其他方法来处理异步任务的结果,例如thenApply、thenAccept、thenRun等。这些方法可以根据具体的需求来选择使用。

推荐的腾讯云相关产品:腾讯云函数(云原生Serverless计算服务),腾讯云COS(对象存储服务),腾讯云数据库MySQL版(关系型数据库服务)。

腾讯云函数产品介绍链接地址:https://cloud.tencent.com/product/scf 腾讯云COS产品介绍链接地址:https://cloud.tencent.com/product/cos 腾讯云数据库MySQL版产品介绍链接地址:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

delete的奇怪行为

delete的奇怪行为分为2部分: // 1.delete用defineProperty定义的属性报错 // Uncaught TypeError: Cannot delete property 'value...但规则是这样,所以奇怪行为1是合理的 占位初始值 猜测如果属性已经存在了,defineProperty()会收敛一些,考虑一下原descriptor的感受: var obj = {}; obj.value...环境(比如onclick属性值的执行环境,函数调用创建的执行环境)和eval环境(eval传入代码的执行环境) 变量对象/活动对象 每个执行环境都对应一个变量对象,源码里声明的变量和函数都作为变量对象的属性存在...) P.S.变量对象与活动对象这种“玄幻”的东西没必要太较真,各是什么有什么关系都不重要,理解其作用就好 eval环境的特殊性 eval执行环境中声明的属性和函数将作为调用环境(也就是上一层执行环境)的变量对象的属性存在...,能不能删可能只是configurable的一部分) 遵循的规则是:通过声明创建的变量和函数带有一个不能删的天赋,而通过显式或者隐式属性赋值创建的变量和函数没有这个天赋 内置的一些对象属性也带有不能删的天赋

2.3K30
  • 提高效率,实现异步编程,我用CompletableFuture(下)

    whenComplete()方法体现了CompletableFuture任务的分阶段特性,这是因为CompletableFuture实现了CompletionStage接口。...通过使用whenComplete()方法,我们可以清晰地表达出异步任务完成后要执行的逻辑。...相比之下,handle()方法在遇到异常时的行为不同。即使在遇到异常的情况下,它也会往下执行。这是因为handle()方法提供了一个可以处理异常参数的机制,允许我们在发生异常时进一步处理。...不过,它们的用途和行为有所不同: thenAccept(Consumer<?...基本方法 whenComplete()方法是CompletableFuture中的一个非阻塞性方法,它不会像get()方法那样导致线程阻塞,从而提供了更好的性能表现。

    32810

    CompletableFuture 原理浅析

    对于上述的两种情况测试代码如下: CompletableFuture.completedFuture("000") .thenApply(r -> r) .whenComplete...最后到了whenComplete的逻辑,其实仔细思考下,不管是thenApply还是whenComplete都是接下来要执行的动作,那么它们的执行逻辑应该是类似的,这里不再赘述。...下面就按照示例代码照提交supplyAsync、提交thenApply、执行whenComplete流程来进行分析,注意 CompletableFuture 的方法大都是返回新的CompletableFuture...回到最初的示例代码 thenApply或者whenComplete都往CompletableFuture 中提交的是什么Completion呢?...从源码中可以得知thenApply最后提交的是UniApply,whenComplete最后提交的是UniWhenComplete,二者的动作都是将各自对应的Completion提交到当前的CompletableFuture.stack

    2K20

    taskscheduler java_java – taskScheduler池的奇怪行为「建议收藏」

    我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一的应用程序,其中包含用于处理警报的部分代码,而应用程序B是一个仅处理警报的新专用应用程序.这里的目标是打破小应用程序中的...threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); threadPoolTaskScheduler.setPoolSize(100); return threadPoolTaskScheduler; } } 昨天,我经历了一个奇怪的行为...已检测到警报并将其发送到新应用B – >好 >应用程序B收到警报并开始根据taskScheduler处理它 – >好 >第一步已由应用程序B处理 – >好 >第二步已由应用程序A处理 – > NOK,奇怪的行为...对我来说,每个taskScheduler都附加到创建它的应用程序.我哪里错了?...UPDATE 我有一个发出警报的真实盒子.这些警报必须由新应用程序处理.但我还有旧盒子没有迁移到新系统.所以我在两个不同的项目中有处理代码.

    1.8K10

    CompletableFuture 异步多线程,那叫一个优雅

    的任务不论是正常完成还是出现异常它都会调用「whenComplete」这回调函数。...「正常完成」:whenComplete返回结果和上级任务一致,异常为null; 「出现异常」:whenComplete返回结果为null,异常为上级任务的异常; 即调用get()时,正常完成时就获取到结果...future.get()); } 正常完成,没有异常时: 正常结束 whenComplete aDouble is 0.11 whenComplete throwable is null 最终返回的结果...:" + o); } CompletableFuture使用有哪些注意点 CompletableFuture 使我们的异步编程更加便利的、代码更加优雅的同时,我们也要关注下它,使用的一些注意点...2、CompletableFuture的get()方法是阻塞的 CompletableFuture的get()方法是阻塞的,如果使用它来获取异步调用的返回值,需要添加超时时间。

    1.5K20

    CompletableFuture详解

    CompletableFuture详解 回顾Future 因为CompletableFuture实现了Future接口所以先看一下Future Future是Java5新加的一个接口,它提供了一种异步并行计算的功能...Future的isDone方法,可以轮询的执行 阻塞的方法有点违背异步编程的理念了,而且轮询会频繁的进行线程的上下文切换浪费无谓的cpu资源,所以jdk1.8提出了CompletableFuture...CompletableFuture的supplyAsync方法,提供了异步执行的功能,线程池也不用单独创建了。...whenComplete whenComplete方法表示,某个任务执行完成后,执行的回调方法,无返回值;并且whenComplete方法返回的CompletableFuture的result是上个任务的结果... whenComplete = CompletableFuture.anyOf(future, either).whenComplete((a, b) -> System.out.println

    1K20

    JUC从实战到源码:六千字详细学习CompletableFuture

    然而,这个接口有很多的局限,比如不能直接把两个异步操作的结果直接关联起来,操作完成后也无法触发某个行为等。所以CompletionStage就是来解决这个问题的。...在CompletionFuture中,有个方法whenComplete,这个方法代表当第一个异步任务执行完毕,将执行这个whenComplete后面的任务,并且可以使用到任务一的结果。...我们看一下源码public CompletableFuture whenComplete( BiConsumer的方法。也就是说,它代表了可以接受两个参数并且进行某种操作,但不需要返回结果的行为。...但它们在实现异步行为时,采用的线程模型是不同的。thenApply: thenApply方法中的函数是在原来的CompletableFuture完成后,在同一个线程中执行的。

    23820

    【小家java】Java8新特性之---CompletableFuture的系统讲解和实例演示(使用CompletableFuture构建异步应用)

    所有的CompletionStage方法都是独立于其他共有方法实现的,因此一个方法的行为不会受到子类中其他方法的覆盖 CompletableFuture实现了Futurre接口的如下策略: CompletableFuture...创建CompletableFuture 四个静态方法(如上),一个空构造函数 whenComplete计算结果完成时的处理 当CompletableFuture的计算结果完成,或者抛出异常的时候,我们可以执行特定的...主要是下面的方法: public CompletableFuture whenComplete(BiConsumerwhenComplete。...(future1, future2); System.out.println(f.join()); } whenComplete 略 我想通过上面的介绍,应该把CompletableFuture

    3.3K41

    Django 1.2标准日志模块出现奇怪行为时的解决方案

    在 Django 1.2 中,标准日志模块有时会出现意想不到的行为,例如日志消息未按预期记录、日志级别未正确应用或日志格式错乱等。...下面是一些常见问题的排查方法和解决方案。1、问题背景在 Django 1.2 中,使用标准日志模块记录信息时遇到了一个奇怪的问题。有时候它可以正常工作,而有时候它却无法记录信息。...,我们发现问题出现在 uploader/views.py 中的 get_thumblist 函数中。...,其中 logger 是一个 logging.getLogger() 函数返回的日志对象。...successful​ # Get the video directory dir_path = os.path.dirname(f.file以上方法可以帮助解决 Django 1.2 中标准日志模块的异常行为问题

    10110
    领券