线程池使用终结版

转载 2014年09月09日 14:05:29

有一段时间没写博文了,今天抽空总结一下,也希望能通过自己写的这些文章,加深理解的同时能帮助在技术方面有疑点的朋友搞清楚个所以然来,由于经常会在网上或群里看到有朋友会问线程方面的东西,就像我一个朋友他们老师讲的,J2SE、J2EE里面使用的线程方面的东西可能不是太多 ,但是在Android开发里面,玩的就是线程(UI Thread)! 好了,废话就说这么多吧,直入正题!今天要讲的东西就是线程池、线程的高效率使用,灵活控制!今天死马我就用最常用的几种方式来分别实现应用中使用的线程方面的知识,(共写了两个不同入口的Activity来分开不同的实现方式,大家可以自行注释AndroidManifest.xml中的Launch入口或打开注释)好了,先随便列几个吧,如:AsyncTask 、Runnable 、Thread、ThreadPool、 Executors等等的使用,看我文章的朋友应该都很清楚小马的方式啦,果断先上效果,再一步步分解代码,来吧,效果图如下:

一:无大小限制的线程池执行效果如下

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 1

二:限制按顺序来执行任务的线程池效果如下

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 2

三:一个一个任务的执行线程池效果如下(与按顺序执行效果是一样的,只是内部实现稍有不同)

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 3

四:按指定个数来执行任务的线程池效果如下

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 4

 

五:创建一个可在指定时间里执行任务的线程池,亦可重复执行,不常用,效果与四相同

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 5

 

六:按指定工厂模式来执行的线程池,效果与四、五一样,但用方式六创建的线程池都有在工厂中指定的线程属性,

比如:线程名字、是否为用户线程等等属性

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 6

 

七:线程池中任务执行时可暂停效果图如下

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 7

 

 

八:用Runnable、ConcurrentLinkedQueue、ConcurrentMap、Future、ExecutorService关联实现的效果图如下

Android研究院之应用开发线程池的经典使用(二十九) - 雨松MOMO程序研究院 - 8

         哦的了,效果看完了,现在就请大家自行修改AndroidManifest.xml中主Activity的入口来看两种不同方式实现的代码效果吧,首先,先贴一下Main.java类的代码,希望大家详细看里面的注释,一定要详细看,你不会吃亏的,相信我!(备注:为了写文章加注释还有查找的时候方便,小马把所有的主类及辅助类以内部类的形式写到一个.java文件里面了,如果朋友们觉得看着乱,不爽的话,可以自行将里面的类抽取到单独的.java文件中,几分钟搞定的事!)

 

方式一(纯ExecutorService、AsyncTask、Runnable关联实现相关文件如下):

 

         1.1:主类文件(Main.java)

 

 

         1.2:布局文件

 

 

 

方式二(Runnable、ConcurrentLinkedQueue、ConcurrentMap、Future、ExecutorService关联实现的相关文件如 下):

 

          2.1:主类文件(MyRunnableActivity.java)