线程初始化参数

线程池创建时,有3个参数比较关键,分别是:corePoolSize、maximumPoolSize,还有一个queueSize。

corePoolSize

线程池基本大小,即在任务没有需要执行的时候线程池的大小。在刚刚创建了ThreadPoolExecutor的时候,线程并不会立即启动,只有在有任务提交的时候才会启动;除非你调用了prestartCoreThread/prestartAllCoreThreads。

maximumPoolSize

线程池中允许的最大线程数,即线程池中运行的线程不可能超过这个数量。

queueSize

线程池队列大小,即排队的队列容量。

如果线程池中线程已达到corePoolSize,并且还有新的任务提交,那么线程池首先将任务存到队列中排队。如果队列也满了,那么线程池将继续在增加 线程,直到达到maximumPoolSize。到这里细心的同学可能会问了:如果队列没设置大小呢?那么我只能告诉你:看运气吧,如果任务少,你的队列 顶多长一些;如果任务很多,那么很可能你要oom了O(∩_∩)O