更新时间:2023年07月25日09时49分 来源:传智教育 浏览次数:
在Java中,Executor和Executors都与线程池相关,但它们有一些区别。
Executor是Java提供的一个简单接口,它定义了一个用于执行任务的方法execute(Runnable command)。它只有一个方法,因此使用时需要手动管理线程池的创建和配置。
Executors是Java提供的工具类,用于创建和管理线程池。它提供了一些静态方法来创建不同类型的线程池,简化了线程池的创建和配置过程。
演示:下面将演示如何使用Executor和Executors来创建并执行一个简单的任务。
首先,我们使用Executor手动创建一个线程池并执行任务:
import java.util.concurrent.Executor; import java.util.concurrent.Executors; public class ExecutorExample { public static void main(String[] args) { // 使用Executor创建一个固定大小为2的线程池 Executor executor = Executors.newFixedThreadPool(2); // 创建并执行任务 executor.execute(() -> { System.out.println("Task 1 is running on thread: " + Thread.currentThread().getName()); }); executor.execute(() -> { System.out.println("Task 2 is running on thread: " + Thread.currentThread().getName()); }); // 关闭线程池 ((ExecutorService) executor).shutdown(); } }
接下来,我们使用Executors类来创建一个固定大小为2的线程池并执行任务:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExecutorsExample { public static void main(String[] args) { // 使用Executors创建一个固定大小为2的线程池 ExecutorService executorService = Executors.newFixedThreadPool(2); // 创建并执行任务 executorService.execute(() -> { System.out.println("Task 1 is running on thread: " + Thread.currentThread().getName()); }); executorService.execute(() -> { System.out.println("Task 2 is running on thread: " + Thread.currentThread().getName()); }); // 关闭线程池 executorService.shutdown(); } }
这两个示例效果是一样的,但是使用Executors类更为简洁,它隐藏了底层线程池的创建和管理细节,使代码更易读和维护。