线程池优点
避免因为线程的频繁创建和销毁所带来的性能开销, 节省资源
能有效控制线程池最大并发数, 避免大量线程之间因互相抢占系统资源而导致阻塞或卡顿
能够对线程进行简单管理
通过为 ThreadPoolExecutor 配置不同的参数创建功能特性不同的线程池
下面是 TheadPoolExecutor 的一个较常用的构造方法
- public TheadPoolExecutor (int corePoolSize,
- int maximumPoolSize,
- long keepAliveTime,
- TimeUnit unit,
- BlockingQueue<Runnable> workQueue,
- ThreadFactory threadFactory )
- corePoolSize
线程池的核心线程数, 默认情况下, 核心线程会在线程池中一直存活, 即使他们处于闲置状态.
maximumPoolSize
线程池所能容纳的最大线程数, 当活动线程数达到这个数值后, 后续的新任务将会被阻塞.
keepAliveTime
非核心线程闲置时的超时时长, 超过这个时长, 非核心线程会被回收.
unit
用于指定 keepAliveTime 参数的时间单位, 这是一个枚举, 常用的有 TimeUnit.MILLISECONDS(毫秒) , TimeUnit.SECONDS(秒) , TimeUnit.MINUTES(秒)
workQueue
线程池中的任务队列.
threadFactory
线程工厂, 为线程池提供创建新线程的功能.
Android 的线程池主要分为 4 类 , 这 4 类线程池可以通过 Executors 所提供的工厂方法来实现
1. FixedThreadPool
通过 Executors 的 newFixedThreadPool 方法来创建. 它是一种线程数量固定的线程池, 当线程处于空闲的状态时, 它们并不会被回收, 除非线程池关闭了.
2. CachedThreadPool
通过 Executors 的 newCachedThreadPool 方法来创建. 它是一种线程数量不定的线程池, 它只有非核心线程, 并且其最大线程数为 Integer.MAX_VALUE. 当线程池中的线程都处于活跃状态时, 线程池会创建新的线程来处理任务, 否则利用空闲的线程处理. 线程池中的空闲线程都有超时机制, 超时就会被回收.
3. ScheduledThreadPool
通过 Executors 的 newScheduledThreadPool 方法来创建. 它的核心线程数量是固定的, 而非核心线程数是没有限制的, 并且当非核心线程闲置时会被立即回收.
4. SingleThreadExecutor
通过 Executors 的 newSingleThreadExecutor 方法来创建. 这类线程池只有一个核心线程, 它确保所有任务都在同一个线程中按顺序执行. SingleThreadExecutor 的意义在于统一所有外界任务到一个线程中, 这使得这些任务不需要处理线程同步的问题.
来源: http://www.jianshu.com/p/d489c9f6eab4