相关文章:
【多线程】一、线程状态切换
【多线程】二、线程优先级&守护线程
【多线程】三、线程访问变量
【多线程】四、线程异常抓捕
【多线程】五、线程池
【多线程】六、锁与同步
【多线程】七、阻塞队列
【多线程】八、异步计算结果获取
【多线程】九、Android异步任务
为解决频繁线程创建、销毁带来的不必要损耗,推荐使用线程池。
ThreadPoolExecutor(
corePoolSize, // 核心线程数,核心线程一直存活(即使空闲,除非allowCoreThreadTimeout(true))
maximumPoolSize, // 最大线程数
keepAliveTime, // 非核心线程闲置时长,超时线程会被回收
timeUnit, // 时间单位,可用TimeUnit.MILLISECONDS
workQueue, // 任务队列,BlockingQueue<Runnable>
threadFactory, // 线程创建工程
rejectedExecutionHandler, // 任务拒绝处理器, 默认ThreadPoolExecutor.AbortPolicy抛异常;
);
@see AsyncTask::THREAD_POOL_EXECUTOR
预置线程池 | 说明 |
---|---|
FixedThreadPool |
固定核心线程数且无超时关闭,任务队列无上限 线程全忙时,新任务一直等待 适用请求频繁,数量基本固定的任务 |
CachedThreadPool |
不定非核心线程数(MAX_INT)超时60s关闭 空任务队列( SynchronousQueue<Runnable> ),新任务立即执行适用数量庞大,耗时较少的任务 |
ScheduledThreadPool |
核心线程数固定无超时关闭 非核心线程无限制(MAX_INT)空闲立即回收 空任务队列,新任务立即执行 适用于定时任务 或 周期性执行的重复任务 |
SingleThreadPool |
单核心线程,确保任务顺序执行(串行) 单线程模型可避免同步问题 |