2019-02-02-vertx下的递归调用

2019-02-02  本文已影响0人  东阿

vertx 下 基于 future 写法的 递归 调用,将不会引起 传统的java递归调用的栈溢出问题。cpu占用也相对平稳


Future future=Future.future();

List<String> dataList=new ArrayList<>();

reDb(1,dataList,future);

future.setHandler(re->log.info("运行完毕"+re.result()));


void reDb(int i, List<String> dataList, Future<Integer> future) {

  testDb(i,dataList).setHandler(re ->{

    if (re.result() < 1000000) {

      reDb(re.result(),dataList, future);

    } else {

      future.complete(re.result());

    }

  });

}


Future<Integer> testDb(int i, List<String> dataList) {

  Future<Integer> future = Future.future();

  log.info("testLog :"+i);

  dataList.addAll(Arrays.asList("1","2","3","4","5","6","1","2","3","4","5","6"));

  vertx.setTimer(1, (e) ->future.complete(i + 1));

  return future;

}

上一篇 下一篇

猜你喜欢

热点阅读