简述 ThreadPoolExecutor 处理流程

本文详细介绍了Java中的ThreadPoolExecutor线程池实现,包括其构造方法参数、任务队列类型及饱和策略选择等内容。

ThreadPoolExecutor继承自抽象类AbstractExecutorService,该抽象类实现了ExecutorService接口。ThreadPoolExecutor也是我们运用最多的线程池。

这里写图片描述

public ThreadPoolExecutor(int corePoolSize,  
                              int maximumPoolSize,  
                              long keepAliveTime,  
                              TimeUnit unit,  
                              BlockingQueue<Runnable> workQueue,  
                              ThreadFactory threadFactory,  
                              RejectedExecutionHandler handler) 
  • 参数说明:

corePoolSize:线程池中所保存的核心线程数。线程池启动后默认是空的,只有任务来临时才会创建线程以处理请求。
maximumPoolSize:线程池允许创建的最大线程数。它与corePoolSize的作用是调整“线程池中实际运行的线程的数量”。当新任务提交给线程池时,如果线程池中运行的线程数量小于corePoolSize,则创建新线程来执行任务;如果此时,线程池中运行的线程数量大于corePoolSize,但小于maximumPoolSize,则仅当阻塞队列满时才创建新线程。如果corePoolSize与maximumPoolSize相同,则创建固定大小的线程池。如果将maximumPoolSize设置为基本的无界值(如Integer.MAX_VALUE),则允许线程池适应任意数量的并发任务。keepAliveTime:当前线程池线程总数达到核心线程数时,终止多余的空闲线程的时间。
Unit:keepAliveTime参数的时间单位,可选值有毫秒、秒、分等。
workQueue:任务队列。如果当前线程池达到核心线程数量corePoolSize后,且当前所有线程都处于活动状态时,则将新加入的任务放到此队列中。
任务队列
1、ArrayBlockingQueue:基于数组的有界阻塞队列;
2、LinkedBlockingQueue:基于链表的无界阻塞队列;
3、SynchroniousQueue:不存储元素的阻塞队列;
4、PriorityBlockingQueue:具有优先级的无对阻塞队列。
threadFactory:线程工厂,让用户可以定制线程的创建过程,一般不需要设置。
Handler:拒绝策略,当线程池和任务队列workQueue都满了的情况下,对新加的任务采取的处理策略。
饱和策略:
1、new ThreadPoolExecutor.DiscardPolicy();
2、new ThreadPoolExecutor.AbortPolicy();
3、new ThreadPoolExecutor.CallRunsPolicy();
4、new ThreadPoolExecutor.DiscardOldestPolicy();
5、自定义策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值