什么是ExecutorService以及Fork/Join 框架是什么

2023年 10月 12日 51.1k 0

Java 是一种目前比较流行的后端编程语言,因为其强大的并发性能,使其成为开发多线程应用程序的绝佳选择。Java 中简化并发管理和执行任务过程的两个关键组件是 ExecutorService 和 Fork/Join 框架。在本文中,我们将探讨这两个框架,并以简单易懂的方式对它们进行讲解。

ExecutorService

ExecutorService 就像一组工作者(线程)的管理器,可以帮助你以受控的方式并发执行任务。它抽象化了管理线程的大部分复杂性。让我们举一个简单的例子来说明它的用法。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorServiceExample {
    public static void main(String[] args) {
        // Create an ExecutorService with a fixed pool of 4 threads
        ExecutorService executorService = Executors.newFixedThreadPool(4);

        // Submit tasks for execution
        for (int i = 0; i  {
                System.out.println("Task " + taskNumber + " is running on thread " + Thread.currentThread().getName());
            });
        }

        // Shutdown the ExecutorService when done
        executorService.shutdown();
    }
}

在这个例子中,我们:

1.ExecutorService使用 . 创建一个具有 4 个线程的固定池Executors.newFixedThreadPool(4)。

  • 使用 Executors.newFixedThreadPool(4) 创建一个具有固定 4 个线程池的 ExecutorService。
  • 使用 execute 方法提交 10 个任务供执行。
  • ExecutorService 负责管理这些任务的线程分配和重用。
  • 执行完毕后,我们将关闭 ExecutorService。
  • Fork/Join Framework

    image.png

    Fork/Join Framework 是一种更专业的并行处理工具。它非常适合需要将大型任务划分为较小的子任务,然后合并其结果的情况。让我们通过一个经典的例子来了解它--计算数组中元素的总和。

    import java.util.concurrent.RecursiveTask;
    import java.util.concurrent.ForkJoinPool;

    public class ForkJoinExample {
    public static void main(String[] args) {
    int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    ForkJoinPool pool = new ForkJoinPool();

    int result = pool.invoke(new SumTask(data, 0, data.length));
    System.out.println("Sum: " + result);
    }
    }

    class SumTask extends RecursiveTask {
    private int[] data;
    private int start;
    private int end;

    public SumTask(int[] data, int start, int end) {
    this.data = data;
    this.start = start;
    this.end = end;
    }

    @Override
    protected Integer compute() {
    if (end - start

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论