美文网首页
Android_ThreadPool

Android_ThreadPool

作者: 738bc070cd74 | 来源:发表于2015-09-13 11:35 被阅读839次

使用线程池,可以重用线程,减少创建、销毁新线程带来的性能开销,相对管理线程方便。

Executor

Executor.png

Executor 是一个接口,线程池的现实是由ThreadPoolExecutor完成


ThreadPoolExecutor.png

corePoolSize:核心线程数,一般会在线程池中存活
maximumPoolSize:最大线程数,超过此值,会来的线程任务会阻塞
keepAliveTime:非核心线程闲置时长,超过会被回收
unit:keepAliveTime的单位
workQueue:任务队列
threadFactory:线程工厂,


ThreadFactory

1.当池子大小小于corePoolSize就新建线程,并处理请求
2.当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去从workQueue中取任务并处理
3.当workQueue放不下新入的任务时,新建线程入池,并处理请求,如果池子大小撑到了maximumPoolSize就用RejectedExecutionHandler来做拒绝处理
4.另外,当池子的线程数大于corePoolSize的时候,多余的线程会等待keepAliveTime长的时间,如果无请求可处理就自行销毁

FixedThreadPool

FixedThreadPool.png
ExecutorService executorService1= Executors.newFixedThreadPool(5);

创建的是一个线程固定的线程池,当线程处于空闲时,不会回收,线程池关闭,回收所有线程,当任务超过活跃线程数量会阻塞

SingleThreadExecutor

SingleThreadExecutor.png
ExecutorService executorService4 = Executors.newSingleThreadExecutor();

线程池内部只有一个核心线程,所有任务都在同一线程中顺序执行

CachedThreadPool

CachedThreadPool.png
ExecutorService executorService2 = Executors.newCachedThreadPool();

线程数量不定,只有非核心线程,当线程池中的线程都活跃时会新建线程,否则利用空闲线程。线程池中的空闲线程超时60s,就会被会收

ScheduledThreadPool

ScheduledThreadPool.png

ScheduledThreadPool 继承ThreadPoolExecutor


ScheduledThreadPool构造器.png
ExecutorService executorService3 = Executors.newScheduledThreadPool(5);

核心线程数量固定,当非核心线程闲置时立即回收,主要用于定时任务和固定周期的重复任务

相关文章

  • Android_ThreadPool

    使用线程池,可以重用线程,减少创建、销毁新线程带来的性能开销,相对管理线程方便。 Executor Executo...

网友评论

      本文标题:Android_ThreadPool

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