asynctask 同步问题_java-在AsyncTask中同步两个并发网络调用
发布日期:2021-06-24 16:44:47 浏览次数:3 分类:技术文章

本文共 851 字,大约阅读时间需要 2 分钟。

如果不需要HTTP调用的响应

CountDownLatch可以帮您解决这个问题.您可以使用count对其进行初始化,然后调用countDown(),该方法在每次HTTP调用之后立即返回.在onPostExecute端,await()会阻塞,直到countDown()被调用计数为止.

所以:

>使用AsyncTask的构造函数中的HTTP调用次数构造CountDownLatch

>在每个HTTP调用之后调用latch.countDown()

>调用onPostExecute的线程将调用latch.await(),它将阻塞直到上述所有线程完成其HTTP调用为止

如果您确实需要回应

上面的方法可以工作(每个countDown()和await()返回之间都有一个事前-事前关系),但是还有另一种方法.

将每个HTTP调用包装在Callable< Response>中,并将其提交给ExecutorService;否则,将其提交给ExecutorService.它会立即给您返回Future< Response&gt ;,然后您可以将其提供给定义onPostExecute的对象.该方法可以使用Response r = future.get()获取实际响应,该响应将一直阻塞直到该特定可调用对象完成为止.如果对所有HTTP调用都执行此操作,则在为每个期货调用futureWhatever.get()之后,将确保HTTP调用已全部完成.

这种方法的一个优点是,在所有HTTP调用完成之前,onPostExecute不必阻塞.它可以取得进展,直到此时所需的那一步完成为止.例如,如果这样做:

Future callA = httpA.get();

processCallA(callA); // this could take a while

Future callB = httpB.get();

...

…那么只要HTTP调用A已经完成,即使HTTP调用B完成,processCallA也可以执行其操作.

转载地址:https://blog.csdn.net/weixin_33921444/article/details/112956321 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:lsof查看占用高_lsof解决磁盘占用过高,查询却无大文件处理一例!
下一篇:慕课python第五周测试答案_中国大学MOOC(慕课)_python+_满分章节测试答案

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年05月05日 19时55分01秒