java version "1.8.0_25"
软件开发活动中,我们经常会听到数据库连接池、内存池、线程池等各种“池”概念,这些“池”到底是什么东西呢?程序的世界里,我们可以将池简单的理解为一种容器类数据结构,比如列表。程序处理信息的过程中,可能会依赖某些资源或者对象(暂且统一称之为对象),比如数据库连接,来执行一些高频操作,比如数据表查询,此时,如果被依赖对象的存活时间比较短,那就意味着需要频繁的创建和销毁对象,这可能会很耗时、耗系统资源(CPU、内存、磁盘、网络等)。为了解决这个问题,进行程序设计时,可能会考虑在程序初始化时,预先创建一批所需对象,并存储到池中,或者根据需要即时创建对象,并在使用完成后,将对象添加到池中,这样,当程序需要(再次)使用对象时,可以直接从池中直接获取现有的对象,节省了频繁创建和销毁对象带来的资源浪费,这就是池的作用,为程序提供复用对象或者提前分配资源的能力。
下文仅针对线程池的一些要点做介绍
corePoolSize
)和最大线程池大小(maximumPoolSize
)ThreadPoolExecutor
会根据corePoolSize
(保持存活(不允许超时退出等)的最小工作线程数,如果设置了allowCoreThreadTimeOut
为true
,则该值为0。可通过getPoolSize
方法获取该值) 和maximumPoolSize
(线程池中允许的最大线程数,可通过getMaximumPoolSize
获取该值)设置的界限自动调整线程池的大小。
当通过execute(Runnable)
方法提交新任务后,如果正在运行的线程的数量小于corePoolSize
,则创建新线程来处理请求,