ThreadPoolExecutor线程池详解

本文详细解析了ThreadPoolExecutor的参数设置,包括核心线程数、最大线程数、任务队列类型及饱和策略。介绍了四种常见队列的特点及适用场景,并探讨了不同策略在队列满载时的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,
           10, 0, TimeUnit.SECONDS,
           //new LinkedBlockingQueue<Runnable>()
           new ArrayBlockingQueue<Runnable>(100)
           ,new ThreadPoolExecutor.DiscardOldestPolicy());

参数列表:
corePoolSize(线程池的基本大小)
maximumPoolSize(线程池最大大小)
workQueue任务队列
Policy线程池饱和策略
1、核心线程创建之后常驻,不会销毁,有任务进来,会一直创建核心线程
2、最大线程:线程池允许创建的最大线程数,如果队列满了,并且已创建的线程数小于最大线程数,则线程池会再创建新的线程执行任务,一定要注意,队列满了之后才会创建到最大线程数
3、任务队列有以下几种
ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列
SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法 Executors.newCachedThreadPool使用了这个队列。
PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
4、饱和策略:
AbortPolicy:直接抛出异常。
CallerRunsPolicy:只用调用者所在线程来运行任务。
DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
DiscardPolicy:不处理,丢弃掉。

如下代码:只有超过100,才会创建新的非核心线程。
for (int i=0 ;i<150;i++){
threadPoolExecutor.submit(new Task(i));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值