首页
学习
活动
专区
工具
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()方法那样导致线程阻塞,从而提供了更好性能表现。

    31010

    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 原理浅析

    对于上述两种情况测试代码如下: 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

    CompletableFuture详解

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

    99020

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

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

    21920

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

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

    1.3K20

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

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

    2.9K41

    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 中标准日志模块异常行为问题

    9310

    JDK1.8新特性CompletableFuture总结

    whenComplete、whenCompleteAsync、还有一个是whenCompleteAsync用自定义Executor 首先看一下这个whenComplete实例方法。...这个就是任务执行完毕调用,传入一个action。这个方法执行线程是当前线程,意味着会阻塞当前线程。下面图中test输出跟whenComplete方法运行线程有关。...根据测试得出结论是:如果调用whenComplete中途,还发生了其他事情,图中主线程sleep(400);导致completableFuture这个任务执行完毕了,那么就使用主线程调用。...如果调用中途没有发生其他任务且在触碰到whenComplete方法时completableFuture这个任务还没有彻底执行完毕那么就会用completableFuture这个任务所使用线程。...方法瞅着挺多。实际上就是异不异步和加不加自定义Executor. 注:whenComplete中出现问题在then中测试不存在、使用就是上一个任务线程。

    40710
    领券