Android多线程:线程池ThreadPool简介

244 阅读1分钟

在Android开发中,对于高并发的场景,通常需要用到java.util.concurrent包下的线程池,线程池有以下优点:

  1. 重用线程池中的线程,避免因为线程的创建和销毁带来性能开销;
  2. 有效控制线程池的最大并发数,避免大量线程之间因相互抢占系统资源而导致的阻塞现象;
  3. 能够对线程进行管理,并提供定时执行及定间隔循环执行等功能。

在Java的java.util.concurrent包下的Executor接口是task执行的顶级接口,ThreadPoolExecutor是线程池的真正实现类,ScheduledThreadPoolExecutor继承了ThreadPoolExecutor是线程池的真正实现类,并在ThreadPoolExecutor的基础上添加了对执行周期性任务的支持。concurrent包内,将常用的调用方式进行了封装,放在Executors类中,因此我们通常可以调用Executors类中的方法来实现常规场景下的线程池的调用。

四种最常用的线程池的对比如下:

类型创建方法说明
FixThreadPoolExecutors.newFiedThreadPool(int nThreads)一种线程数量固定的线程池,只有核心线程并且不会被回收,没有超时机制
CachedThreadPoolExecutors.newCachedThreadPool()一种线程数量不定的线程池,只有非核心线程,当线程都处于活动状态时,会创建新线程来处理新任务,否则会利用空闲的线程,超时时长为60s
ScheduledThreadPoolExecutors.newScheduledThreadPool(int corePoolSize)核心线程数是固定的,非核心线程数没有限制,非核心线程闲置时立刻回收,主要用于执行定时任务和固定周期的重复任务
SingleThreadExecutorExecutors.newSingleThreadExecutor()只有一个核心线程,确保所有任务在同一线程中按顺序执行

相关类的UML图如下

diagram-1040358297502856411.png