工作流程
1.在创建了线程池之后,等待提交过来的任务请求 2.当调用execute()方法添加一个请求任务的时候,线程池会做出如下判断: 3.如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个程序 4.如果正在运行的线程数量大于或者等于corePoolSize,那么将这个任务放入队列 5.如果这个时候队列满了并且正在运行的线程数量还小于maximumPoolSize,那么还是要创建非核心线程立刻执行这个任务 6.如果队列满了并且正在运行的线程数量大于或等于maximumPoolSize,那么线程池会启动饱和拒绝策略来执行 7.当一个线程完成任务的时候,它会从队列中取下一个任务来执行 8.当一个线程无事可做超过一定时间(keepAliveTime)时:线程会判断如果当前运行的线程数大于corePoolSize,那么这个线程就会被停掉。
与有界队列相比,除非系统资源耗尽,否则无界的任务队列不存在任务入队失败的情况当有新的任务到来,系统的线程数小于corePoolSize时,则新建线程执行任务。当达到corePoolSize后,就不会继续增加,若后续仍有新的任务加入,而没有空闲的线程资源,则任务直接进入队列等待。若任务创建和处理的速度差异很大,无界队列会保持快速增长,直到耗尽系统内存