首页 > 解决方案 > 具有多个参数的异步函数

问题描述

我目前有以下编码:

outputData = parseData(in_data, category, lastKey, firstKey);
return outputData.indexOf("true");

parseData 将返回一个 ArrayList。outputData 是一个 ArrayList。

我想将上面的代码转换为异步运行,因为 parseData 需要大量时间来处理。

我的主要问题是:

我可以使用哪些方法将上面的代码转换为接收多个参数并直接输出到变量,如上所示?

标签: javaandroidasynchronousandroid-asynctaskexecutorservice

解决方案


outputData因此,您希望代码异步运行,并在完成所有计算后的一段时间后将结果写入变量 。首先,如果outputData是局部变量,这根本不可能。其次,如果outputData是一个字段,这是可能的,但不方便:当你最终要使用那个值时,你怎么知道异步计算已经完成?所以为了应对这种情况java.util.concurrent.Future而设计了界面。

调用这种孤立的异步代码的常用方法是使用ExecutorService.submit(Callable)which returns Future。当您需要计算结果时,调用Future.get()并等待计算结果:

ExecutorService pool = ForkJoinPool.commonPool(); // or use any other ExecutorService 
Callable<ArrayList> function = ()->parseData(in_data, category, lastKey, firstKey);
Future<ArrayList> future = pool.submit(function); // computation started in parallel, we can do other work
...
ArrayList res = future.get(); // when we eventually need the result of asynchronous computation

推荐阅读