我设法使用Stripe Framework编写REST API。在我的API中,我有几个需要执行和组合其结果的任务。我想出了一种方法,借鉴了JavaScript,它将把任务产生到几个线程并加入而不是按时间顺序实现。因此,我使用了ExecutorService
,但是当请求数量非常大,任务完成的时间比我预期的要长时,我发现了实施的瓶颈。
我的问题与实现相同目的的另一种方式有关。
为了演示,让我们在Javascript上考虑这种方式
import Promise from 'bluebird';
let tasks = [];
tasks.push(task01);
tasks.push(task02);
Promise.all(tasks).then(results => { do_sth_here!} )
将这个想法带到Java,我已经实现了如下
ExecutorService exec = Executors.newCachedThreadPool();
List<Callable<Promise>> tasks = new ArrayList<>();
List<Future<Promise>> PromiseAll;
try {
tasks.add(() -> TaskPromises(Input));
tasks.add(() -> TaskPromise(Input));
PromiseAll = exec.invokeAll(tasks);
for (Future<Promise> fr : PromiseAll) {
// do_some_thing_next
}
}