zoukankan      html  css  js  c++  java
  • 面试题:线程池处理流程 没用

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

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

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

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

    另一种流程解释::::

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



  • 相关阅读:
    从DataGridViewer导出Excel
    C#获取特定进程CPU和内存使用率
    51 nod 1265 四点共面
    51nod 1384 全排列
    51nod 2006 飞行员配对
    codeforces 839A
    codeforce 837C
    codeforces 837B
    codoforces 837A
    GIT
  • 原文地址:https://www.cnblogs.com/shan1393/p/9001201.html
Copyright © 2011-2022 走看看