gpt4 book ai didi

java - Java如何保证ListenableFuture中future.isDone()时回调被调用

转载 作者:行者123 更新时间:2023-11-29 04:24:08 33 4
gpt4 key购买 nike

当通过 ListenableFutre 时界面,它在文档中指出

addListener()

Registers a listener to be run on the given executor. The listener will run when the Future's computation is complete or, if the computation is already complete, immediately.`

由于 Future.get() 是一个阻塞调用,Java 如何保证某些 future 已完成?他们在旋转这个吗?我知道使用像 Dagger 生产者这样的框架,这很容易理解(一旦任务完成,写一些东西,监控线程就会收到通知)。在 ListenableFuture 的情况下,jvm 是否支持开箱即用的东西?

使用 wait()/notify() 之类的机制?


跟进问题:正如你们所有人所说,调用者实际上保证监听器运行,正常情况下使用 ListenableFuture将是 ListenableFuture future = Caller.call(),调用者和被调用者在不同的线程甚至不同的 JVM 中,这是如何在 java 中完成的?监听器存储在调用者线程和被调用者线程中?或者在不同的 JVM 中使用远程注册表?

最佳答案

ListenableFuture 没有什么神奇之处 - 接口(interface)的契约只要求任何实现在完成时调用任何已注册的监听器(或立即,如果已经完成)。

看一个这样的实现可能会有所帮助,AbstractFuture ——具体看.complete() method ,在 future 变为“完成”(通过完成、失败或被取消)后立即调用。为了既快速又线程安全,细节有些复杂,但基本上就是这样。

关于java - Java如何保证ListenableFuture中future.isDone()时回调被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47317120/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com