Android 如何等待多个异步任务完成其工作?
我正在使用Android 如何等待多个异步任务完成其工作?,android,json,rss,android-volley,xmlreader,Android,Json,Rss,Android Volley,Xmlreader,我正在使用threadpoolexecutor使3个异步任务同时工作。每个线程在一个Arraylist中从RSS提要收集数据,然后我想将这3个Arraylist合并到一个主线程中的更新视图中。问题是,我需要在所有3个线程完成工作后执行此操作,如何在这些线程上侦听?您可以调用异步任务get函数,等待它完成,或者您可以在每个任务的onPostExecute函数中增加计数器。一旦计数器值为异步任务数,执行代码 使用倒计时闩锁。这个java类为您提供了方便的同步计数器。初始化计数为3的对象,调用awai
threadpoolexecutor
使3个异步任务同时工作。每个线程在一个Arraylist
中从RSS提要收集数据,然后我想将这3个Arraylist合并到一个主线程中的更新视图中。问题是,我需要在所有3个线程完成工作后执行此操作,如何在这些线程上侦听?您可以调用异步任务get函数,等待它完成,或者您可以在每个任务的onPostExecute函数中增加计数器。一旦计数器值为异步任务数,执行代码 使用倒计时闩锁
。这个java类为您提供了方便的同步计数器。初始化计数为3的对象,调用await()
,然后在每个任务完成时对其调用countDown()
。一旦为0,锁将被释放,您可以执行您的任务。创建一个成员变量并初始化为0,在每次onPostExecute时递增它。还要检查所有onPostExecute中的值是否为3,以及是否为3调用方法来组合arraylist。调用get函数将阻塞用户界面,直到它完成为止。不要这样做。如果我在主线程中调用await()
,它将被阻塞。所以我应该把await()
放在第四个线程中?是的。创建一个线程,该线程将调用await()
。释放锁后,您可以执行操作。如果需要执行UI操作,可以使用UI处理程序:public void run(){countDownLatch.await();uiHandler.post(yourRunnable);}
在并发修改的情况下,最好使用AtomicInteger
。