Executor 最顶层的基础设施

执行提交过来的RunnableTask。
任务的提交 与每个任务的具体的运行机制 **解耦**,不需要显示创建线程。
将 任务的执行者 与 任务的编写者 划分成了两个组件。

  1. Executor executor = anExecutor;
  2. executor.execute(new RunnableTask1());
  3. executor.execute(new RunnableTask2());

ThreadPoolExecutor.execute()

image.png

addWorker()

详见
addWorker()

线程池执行策略

  1. 如果线程池中正在执行的线程数 < corePoolSize,那么线程池就会优先选择创建新的线程而非将提交的任务加到阻塞队列中。
    2. 如果线程池中正在执行的线程数 >= corePoolSize,那么线程池就会优先选择对提交的任务进行阻塞排队而非创建新的线程。
    3. 如果提交的任务无法加入到阻塞队列(队列已满)当中,那么线程池就会创建新的线程
    4. 如果创建的线程数超过了maximumPoolSize,那么拒绝策略就会起作用。