newSingleThreadExecutor():
他的特点是他设定的工作线程只有1个,所有在每次线程运行时最多只有一个线程的活动状态,他保证了所有任务都是被顺序执行的,并且还不允许使用者改变线程池实例,因此就可以避免改变线程工作数
newCachedThreadPool():
他是一种处理大量短时间工作任务的线程池,他有几个特点:
- 他会试图缓存线程并进行重用,当没有缓存线程时,就会创建新的工作线程
- 如果线程闲置的时间超过60秒,就会将这个线程移除
- 长时间闲置时,这种线程池不会消耗什么资源,他的内部使用SynchronousQueue作为工作队列
newFixedThreadPool(int nThreads):
重用指定数目的线程,在任何时候最多只有nThreads这个工作线程是活动的。这就意味着如果任务数量超过了可活动的数量,就会在工作队列中等待空闲线程出现,如果有工作线程退出,就会有新的工作线程被创建,以补足指定数目nThread
newSingleThreadScheduledExecutor():
创建单线程池,返回 ScheduledExecutorService,可以进行定时或周期性的工作调度
newScheduledThreadPool(int corePoolSize):
和创建但线程池是一样的,创建的是ScheduledExecutorService,都可以进行定时或者是周期性的工作调度,但是区别在于单一线程还是多线程
newWorkStealingPool(int parallelism):
这是一个经常被忽略的线程池,他是在Java 8 才加入的这个创建方法,他的内部会构建ForkJoinPool,然后利用Work-Stealing算法,进行处理任务,但是不保证处理顺序
ThreadPoolExecutor():
是最原始的线程创建,newSingleThreadExecutor、newCachedThreadPool、newFixedThreadPool(int nThreads)都是对ThreadPoolExecutor进行封装的