我是線程新手。我搜索了許多與我的問題有關的問題,但我無法爲我找到合適的解決方案。我正在做的是我正在使用四個異步任務來使用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