线程池

基于 API 29

什么是线程池?

代表线程池的是一个接口Executor,它只有一个execute方法,接口Executor真正实现类是ThreadPoolExecutor。

引用线程池好处:

1)提升性能。创建和消耗对象费时费CPU资源。

2)防止内存过度消耗。控制活动线程的数量,防止并发线程过多。

四种线程池:

a

FixedThreadPool:固定大小线程池,只有核心线程,任务队列无限大,没有超时机制,不会被回收。

SingleThreadPool:单任务线程池,只有一个核心线程,任务队列无限大,不会被回收。

CacheThreadPool:缓存线程池,没有核心线程,有足够多的非核心线程,当执行新的任务时,没有空闲线程,则会创先新的线程执行,若有空闲线程,则会使用空闲线程执行任务,非核心线程空闲时长超过60s,则会被回收。

ScheduledThreadPool:定时线程池,核心线程数量固定,非核心线程足够多,非核心空线程空闲时常10s会被回收。

四种线程池并不是类,是对线程池的描述,实质都是ThreadPoolExecutor,只是创建ThreadPoolExecutor对象时传入的参数值不同。


构造函数:

b

corePoolSize:核心线程数量;

maximumPoolSize:线程池中允许的线程最大数量;

keepAliveTime: 闲置时常,默认情况下指非核心线程的闲置时常,超过这个时间将会被回收,设置allowCoreThreadTimeOut为true,会作用于核心线程。

unit:枚举类,时间单位;

workQueue:任务队列,用于存放被执行的Runnable对象。

threadFactory:线程工厂,ThreadFactory是一个接口,只有一个newThread(Runnable )方法,为线程池创建新的线程。

handler:RejectedExecutionHandler是一个接口,只有一个rejectedExecution(Runnable r, ThreadPoolExecutor executor)方法,在执行任务时,若线程池中超过最大线程数量或者线程池关闭,会调用rejectedExecution方法,抛出RejectedExecutionException异常。

ThreadPoolExecutor有四个内部类:CallerRunsPolicy,AbortPolicy,DiscardPolicy,DiscardOldestPolicy都是RejectedExecutionHandler的子类。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容