订阅号怎么做网站,电竞logo免费设计,有什么网站开发客户,wordpress 设置权限日常开发中我们常常使用到线程池#xff0c;其能有效管理线程资源#xff0c;避免过多线程导致系统资源浪费、又能复用线程资源#xff0c;避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类#xff0c;本文主要记录该类相关的知识点。
线程池的六…日常开发中我们常常使用到线程池其能有效管理线程资源避免过多线程导致系统资源浪费、又能复用线程资源避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类本文主要记录该类相关的知识点。
线程池的六大参数
corePoolSize
该参数描述核心线程的数量线程池中分为核心线程和非核心线程其本质都是线程但是核心线程在空闲时一般不会被回收除非设置了allowCoreThreadTimeOuttrue.而非核心线程在空闲后会被回收(回收时间受keepAliveTime参数控制)。
maximumPoolSize
该参数描述非核心线程的数量
keepAliveTime
该参数描述空闲线程的存活时间一个线程(常常是非核心线程)空闲keepAliveTime时间后会被回收调。
unit
该参数是描述keepAliveTime存活时间的单位常见的有毫秒和秒
workQueue
该参数是存储任务的队列通过execute方法递交的runnable会存储在该参数中
threadFactory
该参数是用来创建线程的工厂类当线程池中需要新建线程时会调用该参数的newThread方法创建线程
执行流程
线程池的执行流程中主要涉及到上述到六个参数。当调用execute方法添加一个runnable时流程如下
如果当前存活的线程数小于corePoolSize调用thread的newThread新建核心线程执行任务如果当前线程数大于等于corePoolSize则将该任务添加到对应的workQueue队列中如果添加成功则等待执行否则进行第三步如果存活线程数小于最大线程数则新建非核心线程执行该任务如果存活线程已达到最大线程数则调用RejectExecutionHandler的rejectExecution方法通知调用者。
常见线程池
线程池分类关键参数适用场景FixedThreadPoolcoreSizesize maximumPoolSizesize快速响应的任务因为其核心线程不会被回收CacheThreadPoolcoreSize0 maximumPoolSizeInteger.MAX大量的、耗时短的任务ScheduledThreadPoolcoreSizesize maximumPoolSizeInteger.MAX定时任务或固定周期任务SingleThreadPoolcoreSize1 maximumPoolSize1单线程执行所有任务