在第一節中,我們使用Handler、Thread/Runnable 、URL、HttpURLConnection等等來進行異步下載網絡圖片。然後第二節中換了AsyncTask方式。那麼這一節我們再應用其他方式,這個方式與第一節有點雷同,感覺走了一圈回到原地,只是風景更加美麗。人生很多時候也是如此,從NULL中來再回到NULL中。
那麼它是誰呢?java.util.concurrent
java.util.concurrent 是在併發編程中很常用的實用工具類。
ExecutorService類:具有服務生命週期的Executors。
Executors 類:執行器,將爲你管理Thread 對象。
我們知道這些是用來處理併發任務的,當然我們Demo只是請求一張圖片而已,並不能體現併發,但是假設我們有一個ListView,裏面每一項都需要一張網絡圖片顯示呢?那麼併發性就可以體現出來了:多個線程併發從網絡下載圖片。當然這個版本不會使用listView顯示多個項圖片,以後做個版本吧!研究下。
思路是這樣的:
1:動態的創建N個線程,防在線程池中。
2:系統從線程池中取出一個線程投入執行,線程池中若沒有線程可用,其他任務只有先等待了,直到有新線程釋放,才調用。
如下有幾個方法可以動態的指定多少個線程。
newFixedThreadPool(int nThreads) 指定線程個數
newCachedThreadPool() 系統爲每個任務都建立一個線程
下面可以實現併發下載數據
運行結果爲: