多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### BlockingQueue > 用于传输和保持提交的任务,使用该队列与池大小进行交互 > 排队有三种策略 #### SynchronousQueue > **直接提交的队列** > 默认选项 > 将任务直接提交给线程处理,而不保持它,如果没有空闲的进程,则尝试创建新的进程,如已达到最大值,则执行拒绝策略 #### LinkedBlockingQueue > **有界的任务队列** > 如有新的任务需要执行,如果线程池的实际线程数小于corePoolSize,则会优先创建新的线程, > 若大于corePoolSize,则会将新任务加入等待队列。 > 若队列已满,无法加入,在总线程数,不大于maximumPoolSize的前提下,创建新的进程执行任务, > 若大于maximumPoolSize,则执行拒绝策略 #### ArrayBlockingQueue > **无界的任务队列** > 除非资源耗尽,否则无界的任务队列不存在任务入队失败的情况。 > 当有新的任务到来,系统的线程数小于corePoolSize时,线程池会产生新的线程执行任务 > 当系统的线程数达到corePoolSize后,会继续增加。 > 若后续有新的任务加入,而又没有空闲的线程资源,则任务直接进入等待队列 > 若任务创建和处理的速度差异很大,无界队列会保持快速增长,直到耗尽系统内存。 #### PriorityBlockingQueue > **任务优先队列** > 可以控制任务的执行先后顺序 ***** ```[flow] st=>start: 开始 e=>end: 结束 op1=>operation: 提交任务 op2=>operation: 加入队列 op3=>operation: 分配线程执行 op4=>operation: 提交到线程池 op5=>operation: 等待执行 op6=>operation: 提交成功,分配线程执行 op7=>operation: 拒绝执行 cond1=>condition: 大于corePoolSize ? cond2=>condition: 加入队列失败? cond3=>condition: 小于maximumPoolSize? st->op1->cond1(no)->op3->e cond1(yes,right)->op2(right)->cond2(no)->op5->e cond2(yes,right)->op4(right)->cond3(no)->op7->e cond3(yes,right)->op6->e ```