我是线程新手。我搜索了许多与我的问题有关的问题,但我无法为我找到合适的解决方案。我正在做的是我正在使用四个异步任务来使用THREAD_POOL_EXECUTOR从四个不同的社交媒体中获取数据。代码如下: 等待线程池完成执行
new Fb().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new Twitter().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
...
mAdapter = new MyAdapter(getActivity(),
(ArrayList<Model>) showList);
mListView.setAdapter(mAdapter);
我希望调用是并行的,以节省获取数据的时间。现在我的想法是,我希望所有四个线程完成工作,然后我想按照时间戳显示排序后的数据。现在问题是我的setAdapter在四个线程完成抓取数据之前被调用,因为在UI线程上设置了适配器。我想要一个机制来阻塞UI线程,直到所有四个线程完成获取数据。
我发现,也许我可以用shutdown()和ExecutorService的的awaitTermination()方法。无论如何,任何人都可以帮助我,这将是非常棒的。非常感谢
你说得对。关闭或等待终止。如果要创建多个线程,还可以扩展线程类并创建自己的线程消息并重新使用相同的线程。也许java优化线程创建与持久线程,以避免创建的开销,所以使用executor可以有效地awaitTermination。 –
如果我正确理解AsyncTask的onPostExecute(Result)应该可以解决你的问题。一旦AsyncTask完成,它会在UI线程上调用onPostExecute。如果所有任务都已完成,您可以保留一个计数器,并且一旦完成,您可以在onPostExecute(Result)函数的列表视图中设置适配器。 –
是的,我做了类似的实现。谢谢你的帮助:) – Sagar