导航:首页 > 方法技巧 > 循环调用异步方法如何获取返回值

循环调用异步方法如何获取返回值

发布时间:2023-01-06 07:34:22

1. 怎么循环获取异步请求中回调函数的返回值

这问题不是这i么解的吧,异步的回调函数,你获取回调函数的返回值,时间不确定的。要加个标志位来判断回调函数是否执行完毕。

2. 如何在java中获取线程异步执行之后的结果

java中提供了Future<V>接口和实现了Future接口的FutureTask<V> 类来将线程执行之后的结果返回(通过get()方法)。
1.Future<V>接口
Runnable接口执行任务是不返回任何值的,Runnable的run()方法的执行结果是void,而Future接口的call方法是有返回结果的,这是Runnable跟Future的区别之一,它们的另一个不同之处就是实现了Runnable接口的任务执行是调用ExecutorService的execute(Runnable task)方法,而实现了Future接口的任务是调用ExecutorService的submit(Future task)方法。调用Future的get()方法就能直接得到任务的返回值,该方法会一直阻塞直到任务的结果出来为止,我们可以调用Future的isDone()方法来判断该任务的结果是否准备就绪。
[java] view plain
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class TestFuture {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newCachedThreadPool();
Future result1 = executor.submit(new Callable() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
return sum;
}
});
Future result2 = executor.submit(new Callable() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 10; i < 100; i++) {
sum += i;
}
return sum;
}
});
executor.shutdown();
System.out.println(result1.get() + result2.get());
}
}
2.FutureTask类
FutureTask实现了Future接口,将一个Callable实例作为参数传给它,就能创建一个FutureTask实例,然后用ExecutorService的submit方法来执行这个实例。最后同样是用get方法获取线程执行后的结果。
[plain] view plain
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class TestFutureTask {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newCachedThreadPool();
Callable task = new Callable() {
@Override
public String call() throws Exception {
return "结果";
}
};
FutureTask ft = new FutureTask(task);
executor.submit(ft);
System.out.println(ft.get());
executor.shutdown();
}
}empty

3. 怎么在主调方法内获取异步请求的回调函数的返回值

简单,并且处理很快,就在回调函数中直接处理即可,如果需要花费较长的时间,你就需要建立数据缓冲区,先将数据填入缓冲区,然后直接返回,同时建立单独的线程来处理缓冲区的数据,这当中需要注意缓冲区的同步操作保护例如,你的界面程序调用通信模块,在界面程序中设置了回调用来响应通信模块中接收到的数据,在处理时将收到的数据显示在界面上,对于数据量较少的情形,你直接在回调中将收到的数据抛出消息给主界面刷新即可;对于数据量很大的场合,你直接抛消息很可能会失败,而且每次收到数据都触发界面刷新会严重降低性能,那么就需要先将数据填入缓冲区,主界面以定时读取数据的方式来刷新另外,虚机团上产品团购,超级便宜

4. 如何获取AsyncTask 异步处理的返回值

你新建的类extends AsyncTask后要提供三个泛型参数,并且重载你需要的方法, 三个参数Params,Progress和Result,最后一个就是后台操作后可以返回的值,看例子 public class ProgressBarAsyncTask extends AsyncTask{ /** * 这里的String参数对

阅读全文

与循环调用异步方法如何获取返回值相关的资料

热点内容
兰州景观温室大棚安装方法 浏览:22
pr剪辑素材常用的有哪四种方法 浏览:53
方法报怎么做8年级 浏览:762
万用表电感的测量方法 浏览:354
简单的拼图p图软件技巧方法 浏览:624
腰椎滑脱保守治疗的方法有哪些 浏览:787
如何打紧箍绳结的方法 浏览:880
耳围凹陷的诊断方法有哪些 浏览:522
碱性食物有哪些清理方法 浏览:105
钢轨导静电连接方法 浏览:899
眼睛去水肿快速方法 浏览:515
图形推理怎么判断用哪种方法 浏览:222
桃子要甜的种植方法 浏览:441
不锈钢产品销售技巧和方法 浏览:11
气动黄油枪使用方法 浏览:754
瓦条安装方法 浏览:681
花印清洁面膜使用方法 浏览:484
银行供车利息计算方法 浏览:187
中医艾灸治疗麦粒肿的方法 浏览:573
减速机变比的计算方法 浏览:539