我试图加快并行调用两个API的代码。
第一个是
List<String> A = aService.getListA();
List<Integer> B = bService.getListB();
现在我已将其更改为如下所示的并行调用:
ExecutorService es = Executors.newFixedThreadPool(2);
Future<List<String>> getAs = es.submit(() -> aService.getListA());
Future<List<Integer>> getBs = es.submit(() -> bService.getListB());
es.shutdown();
这似乎工作正常,但是我不确定这段代码是否完美,以及万一发生什么情况,例如,如果getListB()永远无法回答。
编辑:将int更改为Integer
答案 0 :(得分:3)
这似乎工作正常,但是我不确定这段代码是否完美,以及万一发生什么情况,例如,如果getListB()永远无法回答。
回答第二部分:在这种情况下,您的将来对象就坐在那儿,并且每次您调用isDone()
时,它都会向您返回 false 。
换句话说:如果您想使用某种超时方式,那么您可以可以在接收该将来的级别上进行。另一方面,它也可以进入该服务类。含义:服务本身知道超时,并可以通过某种方式将其传达给用户。
在您的情况下,哪个选项最有效的实际决定主要取决于设计的其余部分以及设计应满足的要求。因此:我们无法评估最适合您的 。