美文网首页
Android线程池

Android线程池

作者: 笑对浮华 | 来源:发表于2021-12-01 16:54 被阅读0次

Android中线程池的概念源自Java中的Executor,Executor是一个接口,真正的实现类是ThreadPoolExecutor,ThreadPoolExecutor构造方法中有一系列参数来配置线程池的属性:

ThreadPoolExecutor

corePoolSize——核心线程数,一直保存在线程池中的线程,处于空闲状态也不会销毁,除非allowCoreThreadTimeOut属性值设置为true,此时核心线程空闲状态超出keepAliveTime设置的时间时就会被销毁;

maximumPoolSize——最大线程数,某些类型的线程池中,如果所有的核心线程都处于活动状态,此时进来新任务线程池就会创建非核心线程,去执行新任务,当线程池中的线程数超过这个值,新进来的任务就会进入任务队列等待,直到有空闲出来的线程去执行;

keepAliveTime——非核心线程空闲超时时间,非核心线程空闲的时间超过这个值,那么将会销毁回收,当allowCoreThreadTimeOut属性设置为true时,核心线程也会受其影响;

unit——时间单位,是一个时间枚举类,常用的有MILLISECONDS(毫秒)、SECONDS(秒)、MINUTES(分钟)等;

workQueue——任务队列,当线程池中没有空闲线程去执行任务时,放到任务队列中等待。

Android中5种线程池:

1、FixedThreadPool

FixedThreadPool

这种线程池创建的时候核心线程数即为最大线程数,只有核心线程,没有非核心线程,当线程池中所有线程都处于活动状态时,新进来的任务会在任务队列中等待,直到有线程空闲出来去执行,所以这种线程池的任务队列没有大小限制,同时因为都是核心线程,所以也没有超时机制。

2、CacheThreadPool

CacheThreadPool

这种线程池创建的时候核心线程数为0,只有非核心线程,因为非核心线程在空闲一段时间会被回收,所以这种线程池的线程数量是不定的。由于只有非核心线程,并且最大线程数为Integer.MAX_VALUE,线程池中的线程上限非常大,新进来的任务在没有空闲线程时基本都会去新建,所以这种线程池中的任务队列基本用不上。同时由于线程池中都是非核心线程,在空闲的时候会回收,所以这种线程池适用于大量并且耗时少的场景,在执行完任务后,所有线程都会回收,几乎不再占用系统资源。

3、ScheduledThreadPool

ScheduledThreadPool

这种线程池创建的时候传入核心线程数,核心线程数是固定的,最大线程数为Integer.MAX_VALUE,超时时间为10ms(DEFAULT_KEEPALIVE_MILLIS=10L,MILLISECONDS),所以非核心线程在空闲状态会立马回收,这类线程池主要用于执行定时任务和周期任务。

4、SingleThreadExecutor

SingleThreadExecutor

这种线程池创建的时候核心线程数和最大线程数都为1,线程池中只有一个核心线程,这个线程池确保所有的任务都在同一个线程中按顺序执行,意义在于将外界所有任务统一到一个线程中执行,使得这些任务之间不需要去处理线程同步问题。

5、WorkStealingPool

WorkStealingPool

这个线程池是在Java 1.8出现的,这种线程池中会将任务按线程数均分,先工作完的线程回去帮助其他线程,达到最快完成任务的目的。上面4中线程池,要么是线程固定,要么是线程数最大值太大,容易造成内存溢出,所以在1.8后推出这种线程池。

相关文章

  • 线程池创建和相关知识

    线程池创建(单例):Android线程池得要这么用 - 简书 线程池相关知识:Android开发之线程池使用总结 ...

  • Android线程池的使用

    一、线程与线程池,为什么要使用线程池 1、Android中的线程 在Android中有主线程和子线程的区分。主线程...

  • 线程池

    话题:线程池Android中的线程池有哪些?它们的区别是什么?为什么要使用线程池? 线程是Android里面一个很...

  • 笔记:Android线程和线程池

    Android线程和线程池 Android中的线程操作相关的类有 AsyncTask IntentService ...

  • 第十九周 线程池

    话题:线程池 Android 中的线程池有哪些?它们的区别是什么?为什么要使用线程池?关键字:线程池、Thread...

  • Android 多线程:线程池理解和使用总结

    一、Android线程池介绍 1.1 原理 Android中的线程池概念来源于Java中的Executor,Exe...

  • Android面试之线程和线程池

    Android中的线程形态 AsyncTask底层用到了线程池。AsyncTask封装了线程池和Handler,它...

  • Android多线程规划

    Android上的线程池使用 Android线程 特性 Each thread costs a minimum o...

  • 19. 线程池

    Android 中的线程池就是 java 中的线程池,即 ThreadPoolExecutor 类。 Java 通...

  • Android的线程和线程池

    Android的线程和线程池 标签(空格分隔): android 一些概念: 线程分类:主线程和子线程,主线程主要...

网友评论

      本文标题:Android线程池

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