8、什么是 Executors 框架

41 阅读2分钟

"Executors"框架是Java标准库中的一个并发编程工具,旨在简化和抽象多线程任务的执行和管理。它提供了一组类和接口,用于管理线程池、任务调度和并发执行。

在Java中,直接操作线程可能会比较复杂,需要手动处理线程的生命周期、任务提交、线程池管理等问题。Executors框架通过提供高级别的抽象,让开发者能够更容易地处理并发任务,从而降低了编写多线程代码的复杂性。

以下是Executors框架的一些核心组件和概念:

  1. Executor接口: 这是框架的根接口,定义了一个用于执行任务的单个方法 void execute(Runnable command)
  2. ExecutorService接口: 继承自Executor接口,提供了更丰富的任务提交和管理方法。它代表一个线程池,可以管理线程的生命周期、执行任务、获取结果等。
  3. ThreadPoolExecutor类: 实现了ExecutorService接口,是一个灵活的、可配置的线程池实现。通过调整参数,可以自定义线程池的大小、任务队列、拒绝策略等。
  4. ScheduledExecutorService接口: 继承自ExecutorService接口,增加了对任务调度的支持。可以用于定时执行任务或周期性地执行任务。

Executors框架的使用流程通常包括以下步骤:

  1. 创建一个ExecutorService对象,可以使用工厂方法从Executors类中获取线程池实例。
  2. 提交任务给ExecutorService,通常通过调用 execute()submit() 方法。
  3. ExecutorService会管理线程的创建、执行任务、维护线程池大小等。
  4. 可以通过调用shutdown()shutdownNow()方法来关闭ExecutorService,释放资源并终止线程池。

Java通过Executors提供四种线程池,分别为:

  • 1、newCachedThreadPool创建⼀个可缓存线程池,如果线程池⻓度超过处理需要,可灵活回收空闲线程,若⽆可回收,则新建线程。
  • 2、newFixedThreadPool 创建⼀个定⻓线程池,可控制线程最⼤并发数,超出的线程会在队列中等待。
  • 3、newScheduledThreadPool 创建⼀个定⻓线程池,⽀持定时及周期性任务执⾏。
  • 4、newSingleThreadExecutor 创建⼀个单线程化的线程池,它只会⽤唯⼀的⼯作线程来执⾏任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执⾏。

需要注意的是,虽然Executors框架简化了多线程编程,但在使用时仍需注意线程安全、资源管理等问题,以避免潜在的并发问题。同时,根据实际需求选择适当的线程池大小、拒绝策略等参数也很重要。