ThreadManager
原文地址
大文件 and 多下载任务的封装二
大文件 and 多下载任务的封装三·
前段时间对三级缓存机制做了系统的分析,但是对于网络下载的问题还有很多,比如今天遇到的问题,针对一些需要下载大文件,并且需要进行多线程下载的应用来说,(比如,像一些应用商店,软件的下载和一些累似的多线程的下载类型)就需要用到线程池,下载就简单介绍对线程池的封装
一.为什么要使用线程池
根据android单线程模式规定,android只允许有一个主线程,也就是UI线程,一切更新UI的操作必须在UI线程中使用,然而对应的一切的耗时操作,只允许在子线称中执行,所以针对子线称的下载操作,可以使用线程池进行管理,所以封装线程吃对线程池管理工具,也是非常实用的。
- 提升性能。创建和消耗对象费时,费CPU资源.
- 防止内存过度消耗。控制活动线程的数量,防止并发线程过多。
- 最大的好处就是,当我们想使用时可以直接新建然后加入线程池即可,也可以对线程进行复用,当我们不想使用的时候直接就可以把它关闭。
二.为什么要对线程池进行封装
有的人可能会说, java.util.concurrent.ThreadPoolExecutor;提供了原生的线程池,我们为什么还要对它进行封装呢?直接使用不就好了,那么问题来了?
- .ThreadPoolExecutor的使用必须保证一个app中只能拥有一个(也就是必须保证单例模式),否则也无法保证子线程的数木
- 封装是为了更好的管理线程,是为了优化代码的使用效率,更好的管理代码。
三.线程池进行封装
####(一)原理分析
- 首先先看一下ThreadPoolExecutor的参数
/**
下面对线程池的方法参数进行解释,其余两个就不解说了,一些参数使用系统默认的即可,
Runtime.getRuntime().availableProcessors();进行设置
对于休息时间,则是为了考虑系统长时间运行而导致的系统发热现象,
一般情况下可以选择为0L
**/
ThreadPoolExecutor executor = new ThreadPoolExecutor(
//1.第一个参数:核心的线程数,
corePoolSize,
//2.第二个参数,默认使用的最大线程数
maximumPoolSize