首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >面试官:你是如何评估一个线程池需要设置多少个线程?

面试官:你是如何评估一个线程池需要设置多少个线程?

作者头像
用户1263954
发布2021-12-02 09:41:44
发布2021-12-02 09:41:44
8080
举报
文章被收录于专栏:IT技术精选文摘IT技术精选文摘

Java并发编程是大厂第一轮面试中的高频面试题,而线程池又是其中的典型代表,本文将梳理关于线程池的工作机制,并提出灵魂之问:你对线程池的工作机制这么了解,那你在工作中是如何判断一个线程池需要创建多少个线程的呢?

1、线程池基本工作原理与面试指南

1.1 java线程池的核心属性

JAVA 线程池的核心属性如下:

  • int corePoolSize 核心线程数
  • int maximumPoolSize 线程池最大线程数
  • long keepAliveTime 线程保持活跃的时间
  • TimeUnit unit keepAliveTime 的时间单位
  • BlockingQueue< Runnable > workQueue 任务挤压队列
  • ThreadFactory threadFactory 线程创建工厂类
  • RejectedExecutionHandler handler 拒绝策略
1.2 向线程池提交任务时线程创建过程

那当用户向线程池提交一个任务的时候,线程池会如何创建线程呢?

  1. 首先线程池会判断当前已创建的线程是否小于 corePoolSize (核心线程数),如果小于,则无论已创建的线程是否空闲,都会选择创建一个新的线程来执行该任务,直到已创建的线程等于核心线程数。
  2. 当线程池中已创建的线程数等于核心核心线程数时,用户继续向线程池提交任务时,此时会先判断任务队列是否已满: 1)如果任务队列未满,则将任务放入队列中。 2)如果任务队列已满,则判断当前线程数量是否超过了最大线程数量,如果未超过,则创建一个新的线程来执行该任务,如果线程池已创建的线程数量等最大线程数,则执行拒绝策略。

量。

那我们怎么判断需要增加更多线程呢? 其实可以用jstack命令查看一下进程的线程栈,如果发现线程池中大部分线程都处于等待获取任务,则说明线程够用,如下图所示:

如果大部分线程都处于运行状态,可以继续适当调高线程数量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术精选文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、线程池基本工作原理与面试指南
    • 1.1 java线程池的核心属性
    • 1.2 向线程池提交任务时线程创建过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档