java - 具有多个参数的异步函数
问题描述
我目前有以下编码:
outputData = parseData(in_data, category, lastKey, firstKey);
return outputData.indexOf("true");
parseData 将返回一个 ArrayList。outputData 是一个 ArrayList。
我想将上面的代码转换为异步运行,因为 parseData 需要大量时间来处理。
我的主要问题是:
- 我需要一个异步处理的解决方案,它接受多个变量并输出 ArrayList
- 直到 parseData 异步完成后才能执行第二行代码。
我可以使用哪些方法将上面的代码转换为接收多个参数并直接输出到变量,如上所示?
解决方案
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
推荐阅读
- javascript - 接口上带有 Typescript 错误的 React-Redux 配置
- javascript - 替换节点中的新行?
- python - 如何在 Google Cloud Function 中将 python 脚本作为子进程运行
- reactjs - 如何实现 Pikaday 在 React 中工作
- flutter - 通过颤振标签为容器着色
- android - 为什么在活动之间发送数据不起作用?
- pandas - 根据条件 pandas 创建标志列
- python - 为什么我不能显示这个 if 语句?
- flutter - 位置更新仅更新标记而不更新地图。扑
- database - MS Access 查询考勤时间