使用ThreadPoolExecutor并行化独立的单线程任务

Java SE 5.0中引入的 任务执行框架是简化多线程应用程序的设计和开发的巨大飞跃。 该框架提供了用于管理 任务概念,管理线程生命周期及其执行策略的工具。

在此博客文章中,我们将描述该框架的功能,灵活性和简单性,以展示一个简单的用例。

基础

执行程序框架引入了一个接口来管理任务执行: 执行程序。 Executor是用于提交任务的接口,表示为Runnable实例。 此接口还将任务提交与任务执行隔离开来 :具有不同执行策略的执行者都发布相同的提交接口:如果您更改执行策略,则提交逻辑将不受更改的影响。

如果您想提交一个Runnable实例来执行,它很简单:

Executor exec = …;
exec.execute(runnable);

线程池

如上一节所述,执行器合同未指定执行器如何执行可运行对象:这取决于您所使用的执行器的特定类型。 该框架提供了一些不同类型的执行器,每种执行器都有针对不同用例量身定制的特定执行策略。

您将要处理的最常见的执行程序类型是线程池执行程序 。,它们是ThreadPoolExecutor类(及其子类)的实例。 线程池执行程序管理一个线程池 (即将要执行任务的工作线程池)和一个工作队列

您肯定已经在其他技术中看到池的概念。 使用池的主要优点是减少了资源创建的开销,重用了使用后释放的结构(在这种情况下为线程)。 使用池的另一个隐式优势是可以调整资源使用量 :可以调整线程池大小以实现所需的负载,而不会损害系统资源。

该框架为线程池提供了一个工厂类,称为Executors 。 使用该工厂,您将能够创建具有不同特征的线程池。 通常,底层实现通常是相同的( ThreadPoolExecutor ),但是工厂类可帮助您快速配置线程池,而无需使用更复杂的构造函数。 出厂方法是:

  • newFixedThreadPool :此方法返回最大大小固定的线程池。 它将根据需要创建新线程,直到最大配置大小。 当线程数达到最大值时,线程池将保持大小不变​​。
  • newCachedThreadPool :此方法返回无限制的线程池,即没有最大大小的线程池。 但是,当负载减少时,这种线程池将拆除未使用的线程。
  • newSingle
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值