首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java并发基础:Executor接口和Executors类的区别

Java并发基础:Executor接口和Executors类的区别- 程序员古德

Executor是Java中的一个接口,它定义了一种将任务提交与任务执行机制(包括线程管理、调度等)分离的方式,Executors是一个工具类,它提供了多个静态工厂方法,用于创建不同类型的Executor实例。

代码案例

下面展示了如何使用Executor接口来执行异步任务,如下代码案例:

import java.util.concurrent.Executor;

import java.util.concurrent.Executors;

public class ExecutorExample {

public static void main(String[] args) {

// 创建一个单线程的Executor

Executor executor = Executors.newSingleThreadExecutor();

// 创建并提交几个任务

for (int i = 0; i < 5; i++) {

final int taskId = i;

executor.execute(() -> {

System.out.println("Task " + taskId + " is running by " + Thread.currentThread().getName());

});

}

}

}

在这个例子中,创建了一个单线程的Executor,这意味着所有提交的任务都会按照提交的顺序(FIFO)在一个单独的线程中执行,通过调用executor.execute()方法来提交任务,每个任务都是一个Runnable对象(在这里使用了Lambda表达式来创建匿名内部类)。

下面展示了如何使用Executors,如下代代码:

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class ExecutorsExample {

public static void main(String[] args) {

// 创建一个固定大小的线程池

ExecutorService executorService = Executors.newFixedThreadPool(3);

// 提交任务到线程池

for (int i = 0; i < 5; i++) {

final int taskId = i;

executorService.submit(() -> {

System.out.println("Task " + taskId + " is running by " + Thread.currentThread().getName());

});

}

}

}

在这个例子中,使用Executors.newFixedThreadPool(3)创建了一个包含三个线程的固定大小的线程池,然后,提交了五个任务到线程池,由于线程池的大小是固定的,所以最多只有三个任务会同时执行,其余的任务会在队列中等待,直到线程池中有可用的线程。每个任务都是通过调用executorService.submit()方法提交的,该方法返回一个表示异步计算结果的Future对象。

核心总结

Java并发基础:Executor接口和Executors类的区别 - 程序员古德

1、Executor

定义:Executor是Java中的一个接口,它定义了一种将任务提交与任务执行机制(包括线程管理、调度等)分离的方式。

用途:Executor接口提供了一种标准的方法来启动和管理异步任务,而不需要直接操作线程或实现复杂的线程管理代码。

实现方式:Executor接口只有一个方法void execute(Runnable command),用于提交Runnable任务以供执行,具体的任务执行逻辑(如线程的创建、调度和管理)由实现Executor接口的类(如ThreadPoolExecutor)来负责。

2、Executors

定义:Executors是一个工具类,它提供了多个静态工厂方法,用于创建不同类型的Executor实例。

用途:Executors简化了Executor实例的创建过程,它隐藏了线程池的具体实现细节,让开发者能够更专注于任务的提交和执行。

实现方式:Executors类提供了多种创建Executor实例的方法,如:

newFixedThreadPool(int nThreads):创建一个固定大小的线程池,可控制并发执行的线程数。

newSingleThreadExecutor():创建一个单线程的Executor,确保所有任务按照提交的顺序(FIFO)执行。

newCachedThreadPool():创建一个可根据需要创建新线程的线程池,可灵活调整线程数。

3、对比总结

Executor是一个接口,它定义了任务提交和执行的标准方法;而Executors是一个工具类,它提供了创建Executor实例的便捷方法,在实际开发中,通常会使用Executors来创建Executor实例,然后使用该实例来提交和管理异步任务。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OfEjeEuIwfpV1M-BPFehWuuw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券