java - Finagle Future 对象,它们可重用吗?

标签 java twitter future finagle

我是 Finagle 的新手。我现在正在阅读某人的代码,发现 Future 对象在不同的​​连接操作中被重用。我的问题是,这会导致 Future 对象被执行多次(在每个连接中),还是只会执行一次并存储结果以供以后连接使用?

例子:

Future<A> a= b
            .join(c)
            .flatMap(new SomeFunctionReturningA());

Future<Tuple2<A, B>> future1 = a.join(b);
Future<D> future2 = future1.flatMap(new SomeFunctionReturningD()); 
future2.get();

那么 b 会被执行两次,还是只执行一次?

最佳答案

Future 只是一个值的容器,值只会被设置一次! Future[T] 有不同的状态:

  • 设置一个类型为T的值
  • 设置异常

当您在 Future A 上使用带有函数 fmap/flatMap 时,您将创建一个新的 Future B 这将是前一个由函数 f 转换的结果。

注意:

  • 如果 Future A 尚未“填充”,您将有一个尚未填充的 B
  • A中设置值a的线程也会执行f(a)并在B<中设置值
  • 如果 A 已经“填充”,那么 map/flatMap 的调用者也会执行 f(a),但它不会重新计算 A 的值。
  • 您还可以使用 onSuccess/onFailure,它只会注册一些代码,以便在 future 获得其值时执行。

关于java - Finagle Future 对象,它们可重用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13089088/

相关文章:

java - 从泛型返回异常

java - 如何获取zookeeper中路径的创建模式

java - 我应该以什么顺序将对象放入数据库?

java - 如何将新项目导入perforce

FB 点赞/Twitter 关注/Youtube 订阅的 iOS 游戏币

api - Twitter4J : Get all statuses from Twitter account

python - 获取 tweepy 用户组的关注者和关注者列表

scala - kotlin 中是否有 Future.sequence 模拟?

dart - Dart 在构造函数上等待

scala - 在Akka流中,如何从 future 集合中创建无序来源