资讯动态

线程池详解

发布时间:2026/8/7 17:19:29 来源:尧图企业网站定制
创建线程池底层方法new ThreadPoolExecutor()线程池参数如何设置优先保证执行效率看每个任务cpu计算和阻塞等待时间比例阻塞等待时间/cpu计算时间 1* cpu核数类似于漏桶虽然cpu执行效率最高但是任务都会阻塞堆积优先保证吞吐量缓存线程池每来一个任务创建一个线程来处理导致大量线程切换浪费效率来一个任务怎么处理先判断核心线程 --核心线程都被占用就放入任务队列 --任务队列offer失败就创建应急线程 —应急线程数达到最大都被占用就触发拒绝策略创建线程池6个参数只有任务队列不可以动态调整其它参数都支持动态调整都有set方法任务队列只能在构造函数传入而且BlockingQueue也不允许动态修改容量大小核心线程数线程池刚创建出来核心线程数为0任务增多会逐渐创建核心线程直到此参数。核心线程不会回收一直存在参数可调整调大会立即创建新线程调小在核心线程空闲释放出来后会回收任务队列核心线程都在忙再来任务会放到任务队列等待处理阻塞队列的offer失败会创建临时线程。不可以动态调整队列引用 但是可以使用自定义任务队列调整任务队列的大小tomcat使用自定义阻塞队列重写offer方法只要没达到最大线程池个数offer就返回false放入队列失败让创建应急线程最大线程数应急线程数任务队列满了再来任务会临时创建线程以及处理任务处理完了后放回线程池存活一段时间keepAliveTime即被销毁。参数可动态调整调大立即生效调小释放出来后再生效应急线程存活时间keepAliveTime可动态调整参数但是只对新创建的应急线程生效拒绝策略 应急线程数达到设定参数再来任务就会被触发拒绝策略可动态调整ThreadFactory自定义线程创建可以对线程设置name设置异常捕捉器等拒绝策略任务队列满了以后会创建应急线程来处理这个任务如果线程到达最大线程数就会触发拒绝策略终止抛出RejectedExecutionException异常。调用者运行由提交任务的这个线程运行丢弃最早未处理请求丢弃最先进入阻塞队列的任务以腾出空间让新的任务入队列丢弃策略什么都不做即丢弃新提交的任务。有一些现成可用的线程池newCachedThreadPool()可缓存的线程池核心线程数量为0最大线程数量为INT_MAX。阻塞队列不存储元素。线程空闲时间超过60秒被回收。适合处理大量小任务。newFixedThreadPool()固定线程个数的线程池线程都是核心线程没有应急线程。适合处理量少计算量大的任务。任务队列为有界队列newScheduledThreadPool最大线程数为INT_MAX空闲线程会立即回收。任务队列为无界队列。延迟任务线程池内部使用DelayedWorkQueue所有任务按照到期时间排序如果没到时间线程拿任务会阻塞就是延迟队列newSingleThreadPool线程池里面只有一个线程任务队列没有大小限制。任务队列为有界队列动态线程池从三个维度进行监控使用PID自动调整线程池所有参数使用自定义任务队列线程池监控任务队列剩余空间、任务拒绝次数等性能维度任务等待时间、任务p99、任务吞吐等机器资源维度cpu使用率、内存使用率等

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价