java线程池学习(二)
new Thread 弊端:
1、每次new Thread 新建对象,性能差
2、线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多的系统资源导致死机或者OOM
3、缺少更多的功能,如更多执行、线程中断等
线程池--ThreadPoolExecutor
corePoolSize: 核心线程数量
maxinumPool: 线程最大线程数
workqueue: 阻塞队列,存储等待执行的任务,很重要,对线程池产生重大的影响 。
keepaliveTime: 线程没有任务执行时,最多保持多久时间终止 。
unit: keepalivetime 的时间单位
threadFactory: 线程工厂,用来创建线程池使用的 。
rejectHeader: 当拒绝处理任务时的策略
线程池的几个状态:
1、 running : 接受新提交的任务,也能处理阻塞队列中的任务
2、shutdown: 不能接受新提交的任务,但是可以处理线程池中正在等待的任务
3、stop: 不能接受新提交的任务,也不能处理阻塞队列的任务
4、tidying : 如果所有的任务都终止了,有效线程数为0 ,线程池会进入到该状态
execuor: 提交任务,交给线程池执行
submit : 提交任务,能够返回执行结果
shutdown: 关闭线程池,等待所有的任务执行完
shotdownnow: 关闭线程池,不等待所有的任务执行完
gettaskcount : 获取已经执行和还没有执行的任务
getcompletedTaskCount(): 获取已经执行完成的线程数量
getpoolsize: 线程池当前的线程数量
getactivecount: 当前线程池中正在执行的线程数量
Executors.newCacheThreadPool : 创建一个可缓存的线程池,可以动态的扩展内存大小,并将使用完的内存资源进行回收
Executors.newFixedPool : 创建一个定长的线程池 ,可控制线程的最大并发数,超出的线程在队列中等待
Executors.newScheduledThreadpool: 创建的已是一个订场的线程池,可以做到定时和周期性的执行任务。
Executors.newSingleThreadExecutor: 单线程的线程池,所有的任务只能按照固定的顺序去执行
线程池的合理配置:
1、 CPU密集型任务,需要尽量压榨CPU的资源,参考值可以设置为NCPU+1
2、IO密集型的任务,参考值可以设置为2*NCPU
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!