线程池ThreadPoolExecutor

线程池ThreadPoolExecutor_第1张图片
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)
  1. 当池子大小小于corePoolSize就新建线程,并处理请求

  2. 当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去从workQueue中取任务并处理

  3. 当workQueue放不下新入的任务时,新建线程入池,并处理请求,如果池子大小撑到了maximumPoolSize就用 RejectedExecutionHandler来做拒绝处理

  4. 当池子的线程数大于corePoolSize的时候,多余的空闲线程会等待keepAliveTime长的时间,如果无请求可处理就自行销毁

RejectedExecutionHandler

  1. CallerRunsPolicy :当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程中处理被拒绝的任务。在这种方式(CallerRunsPolicy)中任务将由调用者线程去执行。

  2. AbortPolicy :对拒绝任务抛弃处理,并且抛出异常。SynchronousQueue也会抛出异常。

  3. DiscardPolicy :对拒绝任务直接无声抛弃,没有异常信息。

  4. DiscardOldestPolicy :对拒绝任务不抛弃,而是抛弃队列里面等待最久的一个线程,然后把拒绝任务加到队列。(曾在UPOS项目中更新规则文件的版本)

鸣谢:Java多线程系列--“JUC线程池”05之 线程池原理(四) - 如果天空不死 - 博客园

你可能感兴趣的:(线程池ThreadPoolExecutor)