考虑以下Java代码(我正在使用的Java代码的简化版本-如果出现错误,是因为我没有通过编译器运行它)
CountdownLatch latch = new CountdownLatch(collection.size());
for(Whatever thing : collection){
provider.doWork(thing, result -> {
process(result);
latch.countDown();
};
}
try {
latch.await();
} catch (InterruptedException ignore) {}
doMoreWork();
因此,我运行了许多异步任务,并等待它们全部完成后再继续。现在,我正在列表中累积异步任务的结果。这可以正常工作,但是我正在研究是否有使用Futures或类似方法的更清洁的实现。问题是异步调用。一个Callable应该返回其工作结果,但是直到以后才知道该工作的结果。不值得重写doWork
以保持同步。我应该不理会它,还是那里有选择?我的部分兴趣是编写更好的代码,而另一部分是只是了解更多有关并发选项的知识。如果重要的话,这是在Android应用中。
答案 0 :(得分:0)
这是一种使用ExecutorService和Future的方法,未在android上进行过测试,但都在1级api上可用:
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
当前项目完成后,将按照提交顺序立即返回。