我们使用Handler、Thread/Runnable、URL、HttpUrlConnection、AsyncTask等来进行异步下载网络图片。那这里我们再采用其他方式:Java.util.concuttent。Java.util.concuttent是在并发编程中很常用的实用工具类。
ExcutorService类:具有服务生命周期的Excutor。
Executors类:执行器,为你管理Thread对象。
我们知道这些是用来处理并发任务的,我们的Demo也只是请求一张图片而已,并不能体现出并发性。假设我们有一个ListView,里面每一项都需要一张网络图片显示。那么就可以体现出并发性了。多线程并发从网络下载图片,思路如下:
1.动态创建N个线程,放在线程池中。
2.系统从线程池中取出一个线程投入执行,线程池中若没有线程可用,其他任务只有先等待了,直到有新线程释放,才调用。
下面有几个方法可以动态的指定多少个线程:
newFixedThreadPool(int nThread):指定线程个数。
newCachedThreadPool():系统为每个任务都建立一个线程。