Android线程池ThreadPoolExecutor参数详解
来源:互联网 发布:杭州旧货市场 知乎 编辑:程序博客网 时间:2024/05/22 07:50
线程池机制
corePoolSize: 核心线程数,能够同时执行的任务数量 maximumPoolSize:除去缓冲队列中等待的任务,最大能容纳的任务数(其实是包括了核心线程池数量) keepAliveTime:超出workQueue的等待任务的存活时间,就是指maximumPoolSize里面的等待任务的存活时间 unit:时间单位 workQueue:阻塞等待线程的队列,一般使用new LinkedBlockingQueue<Runnable>()这个,如果不指定容量, 会一直往里边添加,没有限制,workQueue永远不会满,一般选择没有容量上限的队列; threadFactory:创建线程的工厂,使用系统默认的类 handler:当任务数超过maximumPoolSize时,对任务的处理策略,默认策略是拒绝添加 执行流程:当线程数小于corePoolSize时,每添加一个任务,则立即开启线程执行 当corePoolSize满的时候,后面添加的任务将放入缓冲队列workQueue等待; 当workQueue也满的时候,看是否超过maximumPoolSize线程数,如果超过,默认拒绝执行,如果没有超过,则创建线程立即执行。 举例说明: 假如:corePoolSize=2,maximumPoolSize=3,workQueue容量为8; 最开始,执行的任务A,B,此时corePoolSize已用完,再次执行任务C,则 C将被放入缓冲队列workQueue中等待着,如果后来又添加了7个任务,此时workQueue已满, 则后面再来的任务将会和maximumPoolSize比较,由于maximumPoolSize为3 因为有2个在corePoolSize中运行了,所以只能容纳1个了,那么会立即创建线程执行。那么后面来的任务默认都会被拒绝--通常都会报异常。
* 线程池创建
executor = new ThreadPoolExecutor( corePoolSize, //3 maximumPoolSize,//5,当缓冲队列满,但是未达到最大线程数,创建线程立即执行,否则报异常。 keepAliveTime, //最大线程数中的线程执行完后,会继续等待一段时间。 unit, //等待时间的单位 new LinkedBlockingQueue<Runnable>(),//缓冲队列,超出核心线程池的任务会被放入缓存队列中等待 Executors.defaultThreadFactory(),//创建线程的工厂类 new ThreadPoolExecutor.AbortPolicy()//当最大线程池也超出的时候,则拒绝执行 );
核心线程数corePoolSize的取值策略:
//核心线程池数量的计算规则:当前设备的可用处理器核心数*2 + 1,能够让CPU得到最大效率的发挥;
corePoolSize = Runtime.getRuntime().availableProcessors()*2+1;
maximumPoolSize = corePoolSize;//虽然用不到,但是不能是0,否则报错
0 0
- Android线程池ThreadPoolExecutor参数详解
- Android线程池ThreadPoolExecutor详解
- 详解Android线程池ThreadPoolExecutor的教程
- Android 线程池框架、Executor、ThreadPoolExecutor详解
- Android 线程池框架、Executor、ThreadPoolExecutor详解
- 线程池 threadPoolExecutor详解
- ThreadPoolExecutor线程池详解
- 线程池ThreadPoolExecutor详解
- 线程池ThreadPoolExecutor详解
- 线程池ThreadPoolExecutor详解
- 详解ThreadPoolExecutor线程池
- Android ThreadPoolExecutor 的参数详解
- ThreadPoolExecutor线程池的创建和参数详解
- Android 线程池 ThreadPoolExecutor
- android线程池--ThreadPoolExecutor
- Android--ThreadPoolExecutor线程池
- android 线程池 ThreadPoolExecutor
- ThreadPoolExecutor线程池参数说明
- 谈谈普通码农如何不靠工资也能月入过万
- Zygote进程启动流程
- 第八周 项目1 建立顺序串的算法库
- 带你了解FL Studio是什么?
- java集合学习一
- Android线程池ThreadPoolExecutor参数详解
- memcache 学习
- Android开发踩过的坑
- 存储过程的优缺点
- linux expect spawn、linux expect 用法
- 第八周项目1—数据结构之自建算法库—顺序库
- c语言中常用函数
- 带你跳出width=640的坑
- 网段,子网掩码,网络标识,IP划分