线程池

2018-09-14  本文已影响0人  冬冬269
线程池简介:

android提供了四种线程池,都是由直接或简介配置ThreadPoolExecutor来实现的。

线程池存在的意义:

1.重用线程池中的线程,来减少开启线程和关闭线程的性能开销。
2.控制线程数量,避免大量的线程抢占系统资源而引起的堵塞现象,表现为手机卡顿。
3.对线程做到简单的管理,提供定时执行或指定间隔循环执行等功能。

ThreadPoolExecutor

实现了来自Executor接口。

public interface Executor {

    void execute(Runnable command);
}
重要参数:

1.corePoolSize:核心线程的数量,默认核心线程在线程池中一直存活,即便处于闲置状态,但当设置allowCoreThreadTimeOut 为ture 他就会和非核心线程一样,受keepAliveTime控制。
2.maximunPoolSize:最大线程数。核心线程+非核心线程。
3.allowCoreThreadTimeOut:刚刚说过。。
4.keepAliveTime:时间
5.TimeUnit:时间单位
6.ThreadFactory:线程工厂,创建线程的方式。本身是一个接口,只有一个方法。
7.blockingQueue<runnable> :任务队列。

工作流程:

1.线程池的线程数量没有达到核心线程数,创建新的核心线程执行任务。
2.线程池数量达到核心线程数,把任务插入任务队列中。
3.任务队列也满了,开启非核心线程来执行任务。
4.线程池总线程数达到上限,该任务不执行,线程池通过RejectExecuteHandler的rejectExecute方法通知调用者。

小demo

/**
     * 串行执行多线程任务  第一种 使用线程池
     */

    //任务队列。android 提供有:LinkedBlockingQueue ArrayQueue ArrayBlockQueue 区别自己百度吧。
    LinkedBlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(100);
    //线程工厂
    ThreadFactory threadFactory = new ThreadFactory(){
        @Override
        public Thread newThread(@NonNull Runnable r) {
            return new Thread(r);
        }
    };
    //设置一个核心线程数为1,最大线程数为5,任务队列最大容量为100,闲置关闭时间为1秒的线程池
    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 5, 1l, java.util.concurrent.TimeUnit.SECONDS, workQueue, threadFactory);

    public void executeByExecutor(Runnable runnable){
        threadPoolExecutor.execute(runnable);
    }

android中的四种线程池。

上一篇 下一篇

猜你喜欢

热点阅读