Android线程池

2022-10-14  本文已影响0人  JackieZhu

为什么要引入线程池

默认线程池

ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 100, 10, TimeUnit.SECONDS, new PriorityBlockingQueue<Runnable>());
for(int index=0; index=100; index++){
    executor.execute(new Runnable());
}
public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,       
                            RejectedExecutionHandler handler)
参数 说明
corePoolSize 线程池中核心线程数量
maximumPoolSize 最大能创建的线程数量
keepAliveTime 非核心线程最大存活时间
unit keepAliveTime的时间单位
workQueue 等待队列。当任务提交时,如果线程池中的线程数量大于等于corePoolSize的时候,把该任务放入等待队列
threadFactory 线程创建工厂。默认使用Executors.defaultThreadFactory()来创建线程,线程具有相同的NORM_PRIORITY优先级并且是非守护线程
handler 线程池的饱和拒绝策略。如果阻塞队列满了并且没有空闲的线程,这时如果继续提交任务,就需要采取一种策略处理该任务。

Executors提供的线程池

//单一线程数,同时只有一个线程存活,但线程等待队列无界
 Executors.newSingleThreadExecutor();
//线程可复用线程池,核心线程数为0,最大可创建的线程数为Interger.max,线程复用存活时间是60s.  
 Executors.newCachedThreadPool();
//固定线程数量的线程池
 Executors.newFixedThreadPool(int corePoolSize);
//可执行定时任务,延迟任务的线程池
 Executors.newScheduledThreadPool(int corePoolSize);

关键函数

void execute(Runnable run)//提交任务,交由线程池调度
void shutdown()//关闭线程池,等待任务执行完成
void shutdownNow()//关闭线程池,不等待任务执行完成
int  getTaskCount()//返回线程池找中所有任务的数量
int  getCompletedTaskCount()//返回线程池中已执行完成的任务数量
int  getPoolSize()//返回线程池中已创建线程数量 
int  getActiveCount()//返回当前正在运行的线程数量

状态流转

线程池状态

execute提交任务

execute
上一篇下一篇

猜你喜欢

热点阅读