ThreadPoolExecutor
常用构造方法:
public ThreadPoolExecutor(int corePoolSize, //核心线程数
int maximumPoolSize,//最大线程数(核心线程+非核心线程)
long keepAliveTime,//线程生存时间(默认只对非核心线程起作用)
TimeUnit unit,//时间单位
BlockingQueue<Runnable> workQueue,//任务队列
ThreadFactory threadFactory)//线程工厂
核心线程:当线程池的核心线程数量未达到构造方法指定的的核心线程数时,每有一个任务,都会创建一个核心线程来执行,当核心线程数量达核心线程数上限,开始复用核心线程,当没有空闲的核心线程时,放入任务队列中等待线程。
非核心线程:当最大核心数大于核心线程数并且核心线程无空闲时,有新的任务会进入任务队列等待,如果队列满了,才会创建非核心线程来执行,直到达到最大线程数上限。非核心线程执行完后,会闲置等待keepAliveTime指定的时长后销毁,除非期间有新的任务使用该线程执行。
Executors
Executors是java并发包中提供的一个方便生成线程池的工具类。主要有以下四种:
newFixedThreadPool:创建固定线程数量的线程池
newSingleThreadExecutor:创建单一线程的池
newCachedThreadPool: 创建线程数量自动扩容, 自动销毁的线程池
newScheduledThreadPool:创建支持计划任务的线程池