线程池中会缓存一定数量的线程,这样就避免了因为频繁创建和销毁线程所带来的系统开销
Android中的线程池主要是通过Executor来派生特定类型的线程池
ThreadPoolExecutor是线程池的具体实现,通过配置ThreadPoolExecutor可以实现不同线程池
ThreadPoolExecutor的构造方法
public ThreadPoolExecutor(int corePoolSize(核心线程数),
int maximumPoolSize(最大线程数),
long keepAliveTime(非核心线程超时时长),
TimeUnit unit(指定keepAliveTime的时间单位,如:TimeUnit.MILLSECONDS(毫秒)),
BlockingQueue<Runnable> workQueue(线程池中的任务队列execute提交的Runnable
对象会存储在这里),
ThreadFactory threadFactory(线程工厂,ThreadFactory有一个方法Thread
newThread(Runable r)),
ThreadPoolExecutor执行时:
如果线程池中的线程数量没有达到核心线程数,直接开启一个核心线程执行
如果达到,则插入到任务队列中等待,
如果任务队列已满则开启一个非核心线程来执行任务,
如果已达到线程池的最大值,那么就拒绝执行,并且调用RejectedExecutionHandler的
rejectedExecution方法来通知调用者
自定义线程池时参数设置可以参考AsyncTask
核心线程数为:CPU数+1
最大线程数:2xCPU数+1
超时设置:核心线程无超时,非核心线程1秒,
Android中的线程池主要是通过Executor来派生特定类型的线程池
ThreadPoolExecutor是线程池的具体实现,通过配置ThreadPoolExecutor可以实现不同线程池
ThreadPoolExecutor的构造方法
public ThreadPoolExecutor(int corePoolSize(核心线程数),
int maximumPoolSize(最大线程数),
long keepAliveTime(非核心线程超时时长),
TimeUnit unit(指定keepAliveTime的时间单位,如:TimeUnit.MILLSECONDS(毫秒)),
BlockingQueue<Runnable> workQueue(线程池中的任务队列execute提交的Runnable
对象会存储在这里),
ThreadFactory threadFactory(线程工厂,ThreadFactory有一个方法Thread
newThread(Runable r)),
ThreadPoolExecutor执行时:
如果线程池中的线程数量没有达到核心线程数,直接开启一个核心线程执行
如果达到,则插入到任务队列中等待,
如果任务队列已满则开启一个非核心线程来执行任务,
如果已达到线程池的最大值,那么就拒绝执行,并且调用RejectedExecutionHandler的
rejectedExecution方法来通知调用者
自定义线程池时参数设置可以参考AsyncTask
核心线程数为:CPU数+1
最大线程数:2xCPU数+1
超时设置:核心线程无超时,非核心线程1秒,
任务队列容量:128
具体参数要根据实际情况定义,ThreadPoolExecutor构造有个RejectedExecutionHandler handler不常用没有写出
看了很多,先稍稍写一点。
《Android开发艺术探索》很好,很强大。
BlockingQueue可以看看,我去字体颜色怎么不一样了。。。