多线程之初识线程池

常用参数

图片说明
注:当线程数量多余核心线程数量,且多余的线程的存活时间超过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 有反馈机制,使任务提交的速度变慢。

全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
面了100年面试不知...:今年白菜这么多,冬天可以狂吃了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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