线程池的分类

为什么要用线程池

在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处:

  • 使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗
  • 由于没有线程创建和销毁时的消耗,可以提高系统响应速度
  • 通过线程可以对线程进行合理的管理,根据系统的承受能力调整可运行线程数量的大小等

线程池的常用类型

线程池的常用类型主要有如下三大类:

  • ThreadPoolExecutor
  • ScheduleThreadPoolExecutor
  • ForkJoinPool

1、ThreadPoolExecutor

  • newCachedThreadPool

创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的ThreadFactory创建新线程。
特征:
(1)线程池中数量没有固定,可达到最大(Integer.MAX_VALUE)
(2)线程池中的线程可进行缓存重复利用和回收(回收默认时间为1分钟)
(3)当线程池中,没有可用线程,会重新创建一个线程

  • newFixedThreadPool

创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数nThreads线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么有一个新线程将替代它执行后续的任务(如果需要)。在某个线程被显示地关闭之前,池中的线程将一直存在。
特征:
(1)线程池中的线程处于一定的量,可以很好的控制线程的并发量
(2)线程可以重复被使用,在显示关闭之前,都将一直存在
(3)超出一定量的线程被提交时候需要在队列中等待

  • newSingleThreadExecutor

创建一个使用单个worker线程的Executor,以无界队列的方式来运行该线程(注意:如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将替代它执行后续的任务)可保证顺序的执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的newFixedThreadPool(1)不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程
特征:
(1)线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行

2、ScheduleThreadPoolExecutor

  • newSingleThreadScheduledExecutor

创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期执行
特征:
(1)线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行
(2)可定时或延迟执行线程活动

  • newScheduledThreadPool

创建一个线程池,它可安排在给定延迟后运行命令或者定期执行。
特征:
(1)线程池中具有指定数量的线程,即便是空线程也将保留
(2)可定时或者延迟执行线程活动

3、ForkJoinPool

  • newWorkStealingPool

创建一个带并行级别的线程池,并行级别决定了同一时刻最多有多少个线程在执行,如不传入并行级别参数,将默认为当前系统的CPU个数

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值