线程池

作者: 冬冬269 | 来源:发表于2018-09-14 16:44 被阅读0次
线程池简介:

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中的四种线程池。

  • FixedThreadPool:线程总数就是核心线程数,不设置闲置超时关闭。使用LinkedBlockingQueue并且不设置最大任务数。 能够极快的响应外界请求。

  • CachedThreadPool:线程总数就是非核心线程数,核心线程数为0,并且数量为Integer.Max_VALUE,有超时时间,60s,使用SynchronousQueue,实际上这个任务队列并不能存储元素。闲置时不占用过多资源,适合执行大量的耗时较少的任务。

  • ScheduleThreadPool:核心线程数固定,非核心线程数是Integer.MAX_VALUE,非核心线程闲置时会被马上回收,闲置超时时间是0,使用DelayedWorkQueue(),主要用于执行定时任务和具有固定周期的重复任务。

  • singleThreadPool:一个核心线程,没有非核心线程,使用LinkedBlockingQueue不设置队列长度,目的是把所有任务放到一个线程中按顺序执行,实现了串行并且不需要考虑同步的问题。

相关文章

  • java线程池

    线程VS线程池 普通线程使用 创建线程池 执行任务 执行完毕,释放线程对象 线程池 创建线程池 拿线程池线程去执行...

  • java----线程池

    什么是线程池 为什么要使用线程池 线程池的处理逻辑 如何使用线程池 如何合理配置线程池的大小 结语 什么是线程池 ...

  • Java线程池的使用

    线程类型: 固定线程 cached线程 定时线程 固定线程池使用 cache线程池使用 定时调度线程池使用

  • Spring Boot之ThreadPoolTaskExecut

    初始化线程池 corePoolSize 线程池维护线程的最少数量keepAliveSeconds 线程池维护线程...

  • 线程池

    1.线程池简介 1.1 线程池的概念 线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性...

  • 多线程juc线程池

    java_basic juc线程池 创建线程池 handler是线程池拒绝策略 排队策略 线程池状态 RUNNIN...

  • ThreadPoolExecutor线程池原理以及源码分析

    线程池流程: 线程池核心类:ThreadPoolExecutor:普通的线程池ScheduledThreadPoo...

  • 线程池

    线程池 [TOC] 线程池概述 什么是线程池 为什么使用线程池 线程池的优势第一:降低资源消耗。通过重复利用已创建...

  • java 线程池使用和详解

    线程池的使用 构造方法 corePoolSize:线程池维护线程的最少数量 maximumPoolSize:线程池...

  • 线程池

    JDK线程池 为什么要用线程池 线程池为什么这么设计 线程池原理 核心线程是否能被回收 如何回收空闲线程 Tomc...

网友评论

      本文标题:线程池

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