线程池的执行流程
2019-11-25 16:37:57   21  举报             
     
         
 线程池的执行流程主要包括以下几个步骤:  1. 当有新的任务提交到线程池时,首先会将任务放入任务队列中。 2. 线程池中的空闲线程会从任务队列中取出任务并执行。 3. 如果线程池中的所有线程都在执行任务,那么新的任务将会在任务队列中等待,直到有空闲线程出现。 4. 当一个线程完成任务后,它会返回线程池并等待新的任务。 5. 如果线程池关闭,那么它将不再接受新的任务,但是已经提交的任务会继续执行,直到所有任务完成。 6. 线程池的大小可以根据系统的负载情况进行动态调整,如果系统负载较大,可以增加线程池的大小以提高处理能力;如果系统负载较小,可以减少线程池的大小以节省资源。
    作者其他创作
 大纲/内容
 0
  execute
  任务
  1
  poll/take
  terminated() has completed当terminated钩子函数执行完毕,将转变状态为TERMINATED
  线程池状态表示含义:
  SHUTDOWN
  int的32位,高3位表示状态
  CAPACITY
  任务执行完毕
  RUNNING
  是
  初始化work数量,同时初始化线程池状态为RUNNING
  TERMINATED
  获取失败返回null
  Accept new tasks and process queued tasks接受任务,执行队列中的任务
  任务加入
  阻塞take直到有任务加入或线程池关闭
  When pool is empty
  计算线程池的运行状态
  类
  DiscardOldestPolicy
  CallerRunsPolicy
  提交线程任务
  TIDYING
  corePool
  工作队列
  图参照《Java并发编程的艺术》第9章Java中的线程池-线程池执行流程 
  RejectedExecutionHandler
  AbortPolicy
  DiscardPolicy
  否
  拒绝策略
  maximumPool
  我是分割线
  线程池是否已满
  线程池的运行状态分解
  private static final int COUNT_BITS = Integer.SIZE - 3;private static final int CAPACITY   = (1 << COUNT_BITS) - 1;private static final int RUNNING    = -1 << COUNT_BITS;private static final int SHUTDOWN   =  0 << COUNT_BITS;private static final int STOP       =  1 << COUNT_BITS;private static final int TIDYING    =  2 << COUNT_BITS;private static final int TERMINATED =  3 << COUNT_BITS;
  状态切换:
  丢弃
  根据状态和work数量进行或运算,计算int的实际值
  CAPACITY,线程池允许的最大数量
  2
  表示线程池的状态
  关闭线程池
  线程
  求work的数量,低29位的值
  添加至workers组,并执行start方法
  3
  抛出异常
  核心线程池是否已满/核心线程是否可以超时
  线程执行结束
  抛出异常直接结束
  shutdown()
  按照拒绝策略的实现,拒绝执行该任务
  shutdownNow()
  队列是否已满
  STOP
  主线程
  超时poll()
  private static int runStateOf(int c)     { return c & ~CAPACITY; }
  创建线程池
  private static int workerCountOf(int c)  { return c & CAPACITY; }
  When the terminated() hook method has completed
  图参照《Java并发编程的艺术》第9章Java中的线程池-线程池运行流程 
  核心线程池是否已满
  添加至工作队列
  run
  When both queue and pool are empty
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 