线程池底层队列详解
2021-02-05 02:15
标签:cached 拒绝 执行 strong 任务 scheduled 一个 线程池 pool 这篇博文是接着上一篇 线程池专题 的一个补充,是针对线程池底层队列的种类做一个进一步的深入详解,上一篇博文主要针对一线大厂针对线程池的灵魂 5 问展开的,而这一篇也是综合了另外面试经验,把底层的一些内容再深入剖析一下。 如果运行的线程数 始终首选添加新的线程,而不进行排队。即任务根本不会存入queue中,而是直接运行 如果运行的线程数 >= corePoolSize,则 Executor 始终首选将请求加入队列,而不添加新的线程。 如果无法将请求加入队列,则创建新的线程,除非创建此线程超出 maximumPoolSize,在这种情况下,任务将被拒绝。 针对 BlockingQueue 由上一篇 线程池专题 中源码部分分析可得知,其中 FixedThreadPool 和 SingleThreadExecutor 是使用的无界队列 LinkedBlockingQueue CachedThreadPool 是使用的 直接提交队列 SynchronousQueue 而 ScheduledThreadPool 使用的是 DelayedWorkQueue,这种队列的内部元素会按照延迟时间的长短对任务进行排序,延时时间越短地就排在队列的前面,越先被执行,他的内部采用的是“堆”的数据结构。 线程池底层队列详解 标签:cached 拒绝 执行 strong 任务 scheduled 一个 线程池 pool 原文地址:https://www.cnblogs.com/liang1101/p/12791099.html背景
线程池任务处理
线程池队列详解
上一篇:Java内存模型