美文网首页我爱编程
Android中的线程池

Android中的线程池

作者: 三台东 | 来源:发表于2018-05-26 21:50 被阅读47次

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

                                     ThreadPoolExecutor
    

    以下是 ThreadPoolExecutorded的构造方法
    ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory);
    corePoolSize:线程池的核心线程数,一般配置为CPU核心数+1;
    maximumPoolSize:线程池所能容纳的最大线程数,一般配置为CPU核心数*2+1;
    keepAliveTime:非核心线程闲置时的超长时间,超过这个时长,非核心线程将会被回收,一般配置为1s;
    unit:指定keepAliveTime参数的时间单位;
    workQueue:线程池中的任务队列,用于保存执行execute方法提交的Runnable对象,一般配置为128;
    threadFactory:线程工厂,为线程池提供创建新线程的功能;

                                          线程池的分类
    

    1、FixedThreadPool:一种线程数量固定的线程池,只有核心线程并且核心线程不会被回收,没有超时机制,任务队列也没有大小限制。
    优点:能够更快地响应外界的请求。
    使用方式:
    ExecutorService fixedThreadPool=Executors.newFixedThreadPool(4);
    fixedThreadPool.execute(new Runnable());

    2、CachedThreadPool:一种线程数量不固定的线程池,最大线程数可以任意大,美滋滋,只有非核心线程,有超时机制,超时时长为60s;
    优点:适用于执行大量耗时较少的任务。
    使用方式:
    ExecutorService cacheThreadPool = Executors.newCachedThreadPool();
    cacheThreadPool.execute(new Runnable());

    3、ScheduledTheadPool:核心线程数固定,非核心线程数没限制,非核心线程闲置立即被回收。
    优点:主要用于执行定时任务和具有固定周期的任务。
    使用方式:
    ScheduledExecutorService scheduledTheadPool = Executors.newScheduledThreadPool(4);
    scheduledTheadPool.scheduleAtFixedRate(new Runnable(), 2, 5, TimeUnit.SECONDS);.//延迟2s后,每5s执行一次

    4、singleTheadExecutor:只有一个核心线程,确保所有的任务都在同一个线程中顺序执行。
    优点:不需要处理线程同步的问题。
    使用方式:
    ExecutorService singleThreadPool=Executors.newSingleThreadExecutor();
    singleThreadPool.execute(new Runnable());

    相关文章

      网友评论

        本文标题:Android中的线程池

        本文链接:https://www.haomeiwen.com/subject/yqimjftx.html