Java并发编程之基础篇(六)——Executor框架及线程池

本文介绍了Java中的Executor框架和线程池的概念,解释了使用线程池的原因及其带来的好处,如资源管理和性能优化。讨论了如何通过Executors工具类创建不同类型的线程池,如CachedThreadPool、FixedThreadPool、ScheduledThreadPool和SingleThreadExecutor,并阐述了Executor、ExecutorService和ThreadPoolExecutor接口的角色。此外,还解释了Runnable和Callable接口的区别以及Future接口在获取任务结果和取消任务中的作用。最后,通过一个并发搜索的例子展示了submit()和CompletionService的应用场景。
摘要由CSDN通过智能技术生成

这篇主要说一下Executor框架及线程池。
什么是线程池
顾名思义,线程池就是存放线程的池子,池子里面存放的是已经创建好的N个线程;Java里面一般用ListSet等容器类来存储线程,实现线程池功能。

为什么要使用线程池
首先,线程的创建和销毁是很耗费时间和资源的一件事情。
其次,线程不能无限制的创建,每个线程都会占用内存资源,而且如果线程过多,线程之间的调度也是一件很消耗系统性能的事情。

线程池带来的好处
可以做到随用随取,节省因创建线程而花费的时间
通过设置线程池容量,可以保证创建的线程数量在一个合理范围区间,不会耗光系统资源。

如何创建线程池
Java提供了Executor框架,可以让我们简单方便的使用线程池。

//创建一个为容量为2的线程池
Executor exec = Executors.newFixedThreadPool(2);
//向线程池提交5个任务
for (int i = 0; i < 5; i++){
   
    exec.execute(new Task());
}

Executors

Executors是Executor框架提供的一个工具类,该工具类提供了一些方法,让我们可以方便的创建各种类型的线程池。比如
newCachedThreadPool() : 创建具有缓存功能的线程池,如果线程数量超过处理需求时,可以对空闲线程进行回收,当线程数量不够时,则新增线程。
newFixedThreadPool():创建固定容量的线程池,一旦创建数量设置好就不会改变。
newScheduledThreadPool(): 创建可以延迟或者定时调度的固定容量的线程池。
newSingleThreadExecutor():创建只有一个线程的线程池。
以上方法都会返回一个 ExecutorService 接口描述的对象。

Executor

Executor是个接口,只有短短的三行代码。

public interface Executor {
   
    void execute(Runnable command);
}

Executor接口虽然很简单,但可以将任务的提交和执行成功解耦。
对于我们之前的代码 都是通过 new Thread(runnable).start()方式驱动任务执行,有了Executor之后,建议大家都换成Executor方式驱动任务,见上面的例子。

ExecutorService

Executor也是有生命周期的。分为运行,关闭和已终止三种状态。运行态表示可以向线程池提交任务;关闭状态表示不可以提交任务,但是已提交的会被执行;已终止状态表示所有任务都已经执行完毕。
为了能够管理Executor的生命周期,JDK提供了ExecutorService接口,该接口继承自Executor,除了提供跟生命周期相关的shutdown() 等方法外,还提供了一些功能更强大的任务提交方法。
ExecutorService接口的主要方法如下:

public interface ExecutorService extends Executor {
   

//平缓关闭,不在接受新任务,但是会等待所有已提交的任务完成
void shutdown();

//强制关闭,尝试关闭所有正在执行的任务,并且不会执行等待中的任务,同时返回那些等待执行的任务
List<Runnable> shutdownNow();

//执行所有任务,并拿到所有任务的返回结果
<T> List<Future<T>> invokeAll(Collec
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的一只菜鸟

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值