参考:
https://blog.youkuaiyun.com/wenjunzendeqingruxu/article/details/79488348
1. newFixedThreadPool
说明:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待,如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显示地关闭之前,池中的线程将一直存在。
简单说明: 线程数量固定
ExecutorService fixPool=Executors.newFixedThreadPool(3);//3是指线程池中的线程数量
2. newSingleThreadExecutor
说明:创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newFixedThreadPool(1)不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
简单说明:线程有序
ExecutorService singlePool=Executors.newSingleThreadExecutor();
3. newCachedThreadPool
说明:创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。
简单说明:不用每次新建线程
ExecutorService cachePool=Executors.newCachedThreadPool();
4. newScheduledThreadPool
说明:创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
简单说明:延迟线程池
ScheduledExecutorService scheduledPool=Executors.newScheduledThreadPool(4);//4是指池中所保存的线程数,即使线程是空闲的也包括在内。
5. ThreadPoolExecutor
说明:用给定的初始参数和默认的线程工厂及被拒绝的执行处理程序创建新的ThreadPoolExecutor。使用Executors工厂方法之一比使用此通用构造方法方便得多。
简单说明:自定义线程池
public ThreadPoolExecutor(int corePoolSize,//池中所保存的线程数,包括空闲线程
int maximumPoolSize,//池中允许的最大线程数
long keepAliveTime,//当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间
TimeUnit unit,//参数的时间单位
BlockingQueue<Runnable> workQueue//执行前用于保持任务的队列,此队列仅保持由execute方法提交的Runnale任务
)
// 创建等待队列
BlockingQueue<Runnable> bQueue = new ArrayBlockingQueue<Runnable>(2);
// 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定义地执行
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(2, 3, 2, TimeUnit.MILLISECONDS, bQueue);