JUC线程池

本文详细介绍了Java线程池的创建方式(Executors和ThreadPoolExecutor),关键参数如核心线程数、最大线程数、阻塞队列等,以及运行流程。通过实例演示如何配置线程池以应对不同并发场景,包括线程分配和拒绝策略。适合理解线程池原理和面试准备。

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

线程池

创建线程池
 *    1).Executors
 *    2).new ThreadPoolExecutor()
线程池七大参数:
 *  1.corePoolSize:核心线程数【一直存在,除非设置超时时间(allowCoreThreadTimeOut)】,
 *  线程池创建好之后就绪的线程数
 *  2.maximumPoolSize:最大线程数
 *  3.keepAliveTime:空闲线程(maximumPoolSize-corePoolSize)存活时间
 *  4.unit:时间单位
 *  5.BlockingQueue<Runnable> workQueue:阻塞队列,任务多于core线程时,多于的任务放入
 *  队列中,空闲的线程从队列中获取任务执行
 *  6.ThreadFactory threadFactory:线程工厂
 *  7.RejectedExecutionHandler handler:当阻塞队列满了之后,多余任务的执行策略
运行流程:
 *    1、线程池创建,准备好 core 数量的核心线程,准备接受任务
 *    2、新的任务进来,用 core 准备好的空闲线程执行。
 *      (1) 、core 满了,就将再进来的任务放入阻塞队列中。空闲的 core 就会自己去阻塞队
 *      列获取任务执行
 *      (2) 、阻塞队列满了,就直接开新线程执行,最大只能开到 max 指定的数量
 *      (3) 、max 都执行好了。Max-core 数量空闲的线程会在 keepAliveTime 指定的时间后自
 *      动销毁。最终保持到 core 大小
 *      (4) 、如果线程数开到了 max 的数量,还有新任务进来,就会使用 reject 指定的拒绝策
 *      略进行处理
 *    3、所有的线程创建都是由指定的 factory 创建的。
面试:
 * 一个线程池 core 7; max 20 ,queue:50,100 并发进来怎么分配的:
 * 先有 7 个能直接得到执行,接下来 50 个进入队列排队,在多开 13 个继续执行。现在 70 个
 * 被安排上了。剩下 30 个默认拒绝策略。
new ThreadPoolExecutor(
                 10,  //核心线程数
                 200, //最大线程数
                 10,  //存活时间
                 TimeUnit.SECONDS, //存活时间单位
                 new LinkedBlockingQueue<>(100000), //阻塞队列,最大任务数:100000
                 Executors.defaultThreadFactory(),  //默认工厂
                 new ThreadPoolExecutor.AbortPolicy() //丢弃策略
                 );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值