Finagle Future的对象,它们可以重用吗?

sta*_*wer 4 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();
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ury 5

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

  • 设置值为T的值
  • 设置为例外

当您使用Future上map/flatMap的函数fA,您将创建一个新的Future B,它将是由函数转换的前一个Future 的结果f.

注意:

  • 如果未来A还没有"填补",你将会有一个尚未填补B
  • 设置该值的线程aA也将执行f(a),并在设定的值B
  • 如果A已经"填充",则map/flatMap的调用者也将执行f(a),但不会重新计算其值A.
  • 你也可以使用onSuccess/onFailure它来注册一些代码,以便在将来获得它的价值时执行.