线程池

84 阅读1分钟

简介:

一种线程使用模式,线程过多会带来调度开销进而影响性能,线程池维护多个线程,等待分配可并发执行的任务,避免短时间任务的创建与销毁线程的损耗。线程池不仅能保证内核充分利用,还能防止过分调度

优势

降低资源消耗,提高响应速度,提高线程可管理性

Executors

Executors.newFixedThreadPool(5);//一池N线程
Executors.newSingleThreadExecutor();//一池一线程 一个任务一个任务执行
Executors.newCachedThreadPool();//根据需求创建线程,可扩容,缩容

-   FixedThreadPool和SingleThreadExecutor => 允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而引起OOM异常
-   CachedThreadPool => 允许创建的线程数为Integer.MAX_VALUE,可能会创建大量的线程,从而引起OOM异常

ThreadPoolExecutor 流程参数

int corePoolSize, 核心线程数量

int maximumPoolSize, 最大线程数量

long keepAliveTime, 非核心线程存活时间

TimeUnit unit, 时间单位

BlockingQueue workQueue 阻塞队列

ThreadFactory threadFactory,线程工厂

RejectedExecutionHandler handler 拒绝策略

image.png

只有调用execute方法才会创建线程 核心线程用完先进入阻塞队列,阻塞队列满了再创建新的线程,都满了执行拒绝策略

ThreadPoolExecutor拒绝策略

AbortPolicy(默认)抛异常

CallerRunsPolicy 回退任务给调用者

DiscardOlderstPolicy 抛弃队列中等待最久的任务,把新任务加入队列中

DiscardPolicy 不做任何处理,丢弃新任务

image.png