线程池的分类
1 ThreadPoolExecutor
1.1 newCachedThreadPool
创建一个可根据需要创建新线程的线程池,但是以前构造的线程可以用时将重用他们,并在需要使用时提供ThreadFactory 创建新线程
特征
(1):线程池中数量没有固定,理论可以达到最大值(即Integer.MAX_VALUE)
(2):线程池中的线程可以进行缓存重复利用和回收(回收时间默认是1分钟)
(3):当线程池中没有可用的线程的时候,会创建新的线程
1.2 newFixedThreadPool
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。
如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。
如果在关闭前的执行期间由于失败而导致任何线程终止,
那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。
特征:
(1):线程池中的线程处于一定的量,可以很好的控制线程的并发量
(2):线程可以重复被使用,在显示关闭之前,都将一直存在
(3):超出一定量的线程被提交时候需在队列中等待
1.3 newSingleThreadExecutor
创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newFixedThreadPool(1) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
特征:
(1):线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行
2.ScheduledThreadPoolExecutor
2.1 newScheduledThreadPool
创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
特征:
(1):线程池中具有指定数量的线程,即便是空线程也将保留
(2):可定时或者延迟执行线程活动
2.2 newSingleThreadScheduledExecutor
创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。
特征:
(1):线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行
(2):可定时或者延迟执行线程活动
4.ForkJoinPool
4.1 newWorkStealingPool
创建一个带并行级别的线程池,并行级别决定了同一时刻最多有多少个线程在执行,如不传如并行级别参数,将默认为当前系统的CPU个数