java线程池

ThreadPoolExecutor源码详解

☆樱花仙子☆ 提交于 2019-12-15 11:12:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我之前一篇文章谈到了ThreadPoolExecutor的作用( http://my.oschina.net/xionghui/blog/494004 ),这篇文章介绍下它的原理,并根据原理分析下它的实现源码。 我们先来查看一下ThreadPoolExecutor API,看看它能实现什么功能,然后看看它是怎么实现这些功能的。 ThreadPoolExecutor API ThreadPoolExecutor API比较长,这里列出几个关键点: 核心和最大池大小:如果运行的线程少于 corePoolSize,则创建新线程来处理请求(即一个Runnable实例),即使其它线程是空闲的。如果运行的线程多于 corePoolSize 而少于 maximumPoolSize,则仅当队列满时才创建新线程。 保持活动时间:如果池中当前有多于 corePoolSize 的线程,则这些多出的线程在空闲时间超过 keepAliveTime 时将会终止。 排队: 如果运行的线程等于或多于 corePoolSize,则 Executor 始终首选将请求加入队列BlockingQueue,而不添加新的线程。 被拒绝的任务:当 Executor 已经关闭,或者队列已满且 线程数量达到 maximumPoolSize时(即线程池饱和了)