线程池概念:
Android里面,耗时的网络操作,都会开子线程,在程序里面直接开过多的线程会消耗过多的资源,在众多的开源框架中也总能看到线程池的踪影,所以线程池是必须要会把握的一个知识点.
线程池的作用:
线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中,然后对这些资源进行复用。
减少频繁的创建和销毁对象。
接下来介绍一下线程的运行机制:
1.开线程多,会消耗CPU的资源.
2.单核的CPU
同一时刻只能处理一个线程.多核CPU提示处理多个CPU.
但是可能你会问之前比较早的电脑 都是单核的,为什么可以同时运行多个线程呢? 这就跟线程的运行机制有关啦.
注意:操作系统为每一个运行的线程 安排一定的CPU时间也就是时间片.因为这种时间片时间非常短,多个线程之间频繁的进行切换,所以就给用户感觉好像多个线程同时在运行.
1.线程池中涉及到的相关的类
- Executor:Java里面线程池的顶级接口。
- ExecutorService:真正的线程池接口。
- ScheduledExecutorService:能和Timer/TimerTask类似,解决那些需要任务重复执行的问题。
- ThreadPoolExecutor(重点):ExecutorService的默认实现。
- ScheduledThreadPoolExecutor:继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现.
1.newSingleThreadExecutor 创建一个单线程的线程池, 也即是说,单个线程执行所有任务.将任务按照提交的顺序依次执行.
2.newFixedThreadPool 创建固定大小的线程池,每次提交就创建一个线程.直到达到线程池最大 大小.如果一个线程异常死掉,线程池也会补充一个新的线程.
3.newCachedThreadPool 创建一个可缓存的线程池,如果线程池的大小超过了处理任务需要的线程.那么就会回收部分空闲的线程.此线程池的大小完全依赖 操作系统能够创建的最大线程的大小.
4.newScheduledThreadPool 创建一个大小无限的线程池.
基础的API介绍: