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;
}
网友评论