面试题:线程池处理流程 没用

 

①首先会判断核心线程池里是否有线程可执行,有空闲线程则创建一个线程来执行任务。

②当核心线程池里已经没有线程可执行的时候,此时将任务丢到任务队列中去。

③如果任务队列(有界)也已经满了的话,但运行的线程数小于最大线程池的数量的时候,此时将会新建一个线程用于执行任务,但如果运行的线程数已经达到最大线程池的数量的时候,此时将无法创建线程执行任务。

所以实际上对于线程池不仅是单纯地将任务丢到线程池,线程池中有线程就执行任务,没线程就等待。

 

 

 

另一种流程解释::::

step1.调用ThreadPoolExecutor的execute提交线程,首先检查CorePool,如果CorePool内的线程小于CorePoolSize,新创建线程执行任务。
step2.如果当前CorePool内的线程大于等于CorePoolSize,那么将线程加入到BlockingQueue。
step3.如果不能加入BlockingQueue,在小于MaxPoolSize的情况下创建线程执行任务。
step4.如果线程数大于等于MaxPoolSize,那么执行拒绝策略。



相关文章:

  • 2022-12-23
  • 2021-05-20
  • 2022-01-03
  • 2022-12-23
  • 2022-12-23
  • 2021-05-16
  • 2022-12-23
  • 2021-07-14
猜你喜欢
  • 2022-12-23
  • 2021-07-15
  • 2021-06-17
  • 2022-12-23
  • 2022-01-14
  • 2022-12-23
  • 2021-12-05
相关资源
相似解决方案