Callable中的异步呼叫

时间:2018-10-27 17:18:58

标签: java android concurrency java.util.concurrent

考虑以下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应用中。

1 个答案:

答案 0 :(得分:0)

这是一种使用ExecutorService和Future的方法,未在android上进行过测试,但都在1级api上可用:

PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP

当前项目完成后,将按照提交顺序立即返回。