Android线程池有哪些?他们的区别是什么?为什么要使用线程池?

Android线程池有哪些?他们的区别?

Android线程池都是机遇ThreadPoolExecutor实现的分为以下四种,都是通过Executors静态工厂创建出来的

FixedThreadPool 可以设置固定核心线程数,没有非核心线程 底层实现是LinkedBlockingQueue 

CashedThreadPool 没有核心线程数,可以创建非核心线程,有超时限制 底层实现是SynchronousQueue 没有存储空间所以进来的都会阻塞,拿洗盘子举例他就是没有盘架,洗完了直接放到烘干机中。从而降低了生产者到消费者之间的延迟

SingleThreadPool 只有一个核心线程 底层实现是LinkedBlockingQueue

ScheduleThreadPool 可以实现定期执行任务的线程池,有核心线程,也有非核心线程 底层实现是DelayWorkQueue

为什么使用线程池?

便于线程的管理,减少线程创建对于性能的消耗(性能消耗在哪里了?创建线程时候是要虚拟机上分配,栈,静态方法栈,程序计数器)在扩展一下线程运行时都是有栈针的存储当前执行到哪里了,当线程切换到的时候,就是保存被切换的栈针,寻找切换栈针的一个过程所有线程在切换的时候性能消耗也是很大的

如何自定义线程池?

要定义存储Runnable的队列,用于存储生产出的任务

定义核心线程池数

定义最大线程池数

定义线程超时控制

对于线程池工作流程可参看ThreadPoolExecutor内部原理






猜你喜欢

转载自blog.csdn.net/lovelyprogrammer/article/details/80466899