【发布时间】:2015-08-02 02:39:53
【问题描述】:
我正在使用ThreadPoolExeecutor 让 3 个 Asynctask 同时工作。每个线程都从一个Arraylist 的 RSS 提要中收集数据,然后我想将这 3 个 Arraylist 合并为一个以更新主线程中的视图。问题是我需要在所有 3 个线程完成工作后执行此操作,如何监听这些线程?
【问题讨论】:
标签: android json rss android-volley xmlreader
我正在使用ThreadPoolExeecutor 让 3 个 Asynctask 同时工作。每个线程都从一个Arraylist 的 RSS 提要中收集数据,然后我想将这 3 个 Arraylist 合并为一个以更新主线程中的视图。问题是我需要在所有 3 个线程完成工作后执行此操作,如何监听这些线程?
【问题讨论】:
标签: android json rss android-volley xmlreader
使用CountDownLatch。这个java类为你提供了方便的同步计数器。初始化一个计数为 3 的对象,调用await(),然后在每个任务完成时调用countDown()。一旦它为 0,锁将被释放,您可以执行您的任务。
【讨论】:
await(),它将被阻塞。所以我应该把await()放在第四个线程中?
await() 的线程。释放锁定后,您可以执行您的操作。如果您需要执行 UI 操作,您可以使用 UI 处理程序:public void run() {countDownLatch.await(); uiHandler.post(yourRunnable);}
创建一个成员变量并初始化为 0,每次 onPostExecute 递增。还要检查onPostExecute的值是否为3,是否为3调用方法来组合arraylist。
【讨论】:
AtomicInteger。
您可以调用异步任务获取函数来等待它完成,或者您可以持有一个计数器,每个任务都会在其 onPostExecute 函数中增加。一旦计数器值成为异步任务的数量,执行您的代码。
【讨论】: