线程池核心参数?如何设置?
这句先记住。线程池核心参数决定了线程池最多开多少线程任务怎么排队线程空闲多久回收线程怎么创建满了之后怎么办一、线程池 7 个核心参数Java 里最常见的是ThreadPoolExecutorThreadPoolExecutor( corePoolSize,//核心线程数 maximumPoolSize,//最大线程数 keepAliveTime,//空闲线程存活时间 unit,//时间单位 workQueue,//任务阻塞队列 threadFactory,//线程工厂 handler//拒绝策略 )1. corePoolSize核心线程数。线程池中长期保留的线程数量。意思是即使线程空闲一般也不会被回收任务来了优先用核心线程处理2. maximumPoolSize最大线程数。线程池允许创建的最大线程数量。如果核心线程都忙队列也满了这时候才会继续创建非核心线程直到达到最大线程数。3. keepAliveTime空闲线程存活时间。非核心线程空闲多久后会被回收。比如最大线程数临时扩容到 20但高峰过后空闲了超过这个时间就会释放掉多余线程。4. unitkeepAliveTime的时间单位。比如秒、毫秒。5. workQueue任务阻塞队列。当核心线程都在忙时新任务先进入队列排队。常见队列ArrayBlockingQueue有界队列LinkedBlockingQueue链表队列SynchronousQueue不存任务直接交给线程DelayQueue延迟任务6. threadFactory线程工厂。用来自定义创建线程比如线程名称是否守护线程优先级7. handler拒绝策略。当线程数到最大、队列也满了再来新任务怎么办。常见 4 种AbortPolicy直接抛异常CallerRunsPolicy让提交任务的线程自己执行DiscardPolicy直接丢弃DiscardOldestPolicy丢掉队列最老的任务二、线程池执行流程任务来了先看核心线程满没满没满就创建核心线程执行满了就放进阻塞队列队列满了再创建非核心线程如果线程数也到最大了就执行拒绝策略你只要记住这条主线先核心线程再队列再最大线程最后拒绝策略。三、这些参数怎么设置1. 先分任务类型CPU 密集型 / IO 密集型CPU 密集型比如复杂计算加密解密大量逻辑运算这种任务主要吃 CPU线程太多反而频繁切换。一般经验是核心线程数 ≈ CPU 核数 或 CPU 核数 1IO 密集型比如查数据库调接口读写文件网络请求这种任务大部分时间在线程阻塞等待 IO。一般线程数可以大一些经验上核心线程数 ≈ CPU 核数 × 2或者更大结合压测定更严谨一点可以说线程数 CPU 核数 × (1 等待时间 / 计算时间)2. 队列不要无脑用无界队列这个很重要。如果使用无界队列比如默认很大的LinkedBlockingQueue任务会一直堆积maximumPoolSize基本失效极端情况下可能 OOM所以生产里通常更建议使用有界队列防止任务无限堆积。3. 最大线程数要结合系统承载能力不能越大越好。因为线程太多会带来频繁上下文切换内存占用增大系统抖动所以最大线程数一般是在核心线程数基础上留一定弹性用于应对流量高峰。4. 拒绝策略要结合业务比如核心任务不能丢 → 可考虑CallerRunsPolicy非核心日志类任务可丢 → 可考虑丢弃策略金融交易类任务一般不能静默丢弃所以拒绝策略一定要和业务容错匹配。四、面试里怎么讲“如何设置”线程池参数设置要结合任务类型和系统容量来定。CPU 密集型任务线程数一般接近 CPU 核数避免线程切换开销IO 密集型任务因为线程经常阻塞等待所以线程数可以适当放大。队列一般建议用有界队列避免任务无限堆积导致 OOM最大线程数则是在核心线程数基础上预留一定扩容空间。拒绝策略要根据业务场景来选比如核心任务不能丢时可以用 CallerRunsPolicy。最终参数通常还要结合压测结果调整而不是写死一个万能值。五、面试回答版线程池核心参数主要有7 个核心线程数 corePoolSize、最大线程数 maximumPoolSize、空闲线程存活时间 keepAliveTime、时间单位 unit、阻塞队列 workQueue、线程工厂 threadFactory 和拒绝策略 handler。线程池执行流程一般是任务先交给核心线程执行核心线程满了进入队列队列满了再创建非核心线程超过最大线程数后触发拒绝策略。参数设置上一般要看任务类型CPU 密集型任务线程数通常接近 CPU 核数IO 密集型可以适当放大队列建议用有界队列避免任务无限堆积最大线程数根据系统承载能力预留弹性拒绝策略则要结合业务是否允许降级或丢弃。总体上线程池参数没有固定值通常要结合业务场景和压测结果来定。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412021.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!