为什么要使用线程池?创建线程池的参数有哪些?线程池的原理是什么?
为什么要使用线程池?
线程池有一下优点:
- 线程在是非常宝贵的资源,使用线程池可以重复使用线程,避免频繁的创建和销毁线程所带来的系统损耗。
- 可以根据系统的具体情况调整线程池中的数量,避免创建太多线程将服务器资源耗尽。
创建线程池的参数有哪些?
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler);
- corePoolSize: 核心线程数
- maximumPoolSize: 最大线程数
- keepAliveTime:当总的线程数大于核心线程数时,空闲线程的最大存活时间
- unit:存活时间单位
- workQueue:存放任务的队列
- threadFactory:创建线程时指定的工厂
- handler:超出最大线程数和队列容量的处理策略
线程池的原理是什么?
提交一个任务到线程池中,线程池的处理流程为:
- 如果当前线程数量少于 corePoolSize,则创建线程来执行任务。
- 如果大于 corePoolSize,将任务存放到 workQueue 中。如果 workQueue 已经满了,则进入下个流程。
- 判断当前线程数量是否少于 maximumPoolSize, 如果少于则创建线程来执行任务。如果创建的线程数量已经达到了 maximumPoolSize,则使用用户配置的 RejectedExecutionHandler拒绝策略处理。
那线程池中线程的数量应该如何设置?
设置线程池中线程数量,要根据不同的业务场景来设置。
常见的场景有两种:
- CPU密集型:CPU+1
- IO密集型:CPU核数*2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!