多线程之初识线程池

常用参数

图片说明
注:当线程数量多余核心线程数量,且多余的线程的存活时间超过KeepAliveTime,则会让线程终止

添加线程的规则

参数的特点

图片说明

内存溢出

当使用无界队列时,不断添加新的线程时,可能会造成内存溢出。

线程池的状态

  1. 当线程池创建后,初始为 running 状态
  2. 调用 shutdown 方法后,处 shutdown 状态,此时不再接受新的任务,等待已有的任务执
    行完毕
  3. 调用 shutdownnow 方法后,进入 stop 状态,不再接受新的任务,并且会尝试终止正在
    执行的任务。
  4. 当处于 shotdown 或 stop 状态,并且所有工作线程已经销毁,任务缓存队列已清空,线
    程池被设为 terminated 状态。

当有任务提交到线程池之后的一些操作:

  1. 当前线程池中线程数<corepoolsize,则每来一个任务就创建一个线程去执行。
  2. 当前线程池中线程数>=corepoolsize,会尝试将任务添加到任务缓存队列中去,若添
    加成功,则任务会等待空闲线程将其取出执行,若添加失败,则尝试创建线程去执行这个任
    务。
  3. 当前线程池中线程数>= Maximumpoolsize,则采取拒绝策略

有 4 种拒绝策略
1)abortpolicy 丢弃任务,抛出 RejectedExecutionException
2)discardpolicy 拒绝执行,不抛异常
3)discardoldestpolicy 丢弃任务缓存队列中最老的任务,并且尝试重新提交新的任务
4)callerrunspolicy 有反馈机制,使任务提交的速度变慢。

全部评论

相关推荐

评估中了已经
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
DKS233:(1)专业技能:Java8也太旧了,最少也要了解到JDK17吧,可以参考现在SpringBoot支持的Java最低版本,熟悉mysql基本理论具体指啥,是锁这种具体原理还是分库分表这些业务场景,spring这些专业词汇,大小写要写对(全篇简历都有这个问题,显得不严谨),熟悉使用框架进行业务开发就别写了,如果要写,起码要写到框架原理部分吧,比如aop,启动原理什么的,springcloud具体指哪些模块呢,写清楚,网关还是鉴权还是什么,“改造”没必要写吧,你直接说用springcloud开发的不就行了(2)项目经历:首先格式就有大问题,时间怎么能换行呢,调整一下,响应速度那个,如果指的是将部分数据从其他数据库转到redis的提升就别写了,因为这个不算难点,redis可以写写分布式这些,比如容灾怎么实现的,数据库同步怎么做的
点赞 评论 收藏
分享
我只是一个小白菜:我还用不惯m4,也是山猪吃不了细糠了
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务