使用completableFuture时避免递归调用

时间:2019-08-10 16:52:31

标签: java

给出一个需要花费大量时间才能完成的功能,并且该功能应该是非阻塞的,因此提供了一个使用completableFuture的接口,例如:

public CompleteableFuture<Item> getItem();

现在,我想将此功能应用于需要获取一项,进行一些计算然后获取下一项直到不再有其他项的情况。使用递归可能看起来像这样:

processOneItem() {
  CompleteableFuture future = new CompletableFuture();

  getItem().thenAccept((Item item) -> {
    if (item != null) {
      // do some stuff
      processOneItem().thenAccept(() -> { future.complete() })
    } else {
      future.complete();
   }
  })
  return completableFuture;
}

现在,由于尚不清楚要处理多少个项目,使用递归方法可能是一个坏主意,因为可能会出现堆栈溢出。

但是,如何在不使用递归的情况下实现这一点并且仍然保持非阻塞状态?

0 个答案:

没有答案