Maison > Java > javaDidacticiel > Comment utiliser le framework Fork/Join dans la concurrence des fonctions Java et le multi-threading ?

Comment utiliser le framework Fork/Join dans la concurrence des fonctions Java et le multi-threading ?

王林
Libérer: 2024-04-27 10:09:01
original
823 Les gens l'ont consulté

Comment créer des tâches parallèles à l'aide du framework Fork/Join en Java ? Définissez la logique des tâches, calculez les résultats ou effectuez des actions. Créez un ForkJoinPool pour gérer les threads parallèles. Utilisez la méthode fork() pour soumettre des tâches. Utilisez la méthode join() pour obtenir les résultats de la tâche.

Comment utiliser le framework Fork/Join dans la concurrence des fonctions Java et le multi-threading ?

Java Fork/Join Framework : Un outil puissant en simultanéité et multithreading

Fork/Join Framework est un outil puissant dans la bibliothèque de concurrence Java qui utilise la stratégie diviser pour régner pour paralléliser les tâches. Il est basé sur un algorithme de « vol de tâches », dans lequel les threads collaborent sur des tâches et volent des tâches dans une file d'attente partagée.

Comment utiliser le framework Fork/Join

  1. pour créer une classe RecursiveTask ou RecursiveAction : Définissez la logique d'exécution de la tâche, qui est utilisée pour calculer les résultats ou effectuer des actions respectivement.
  2. Créer un ForkJoinPool : Créez un pool de threads pour gérer les threads simultanés.
  3. Soumettre des tâches : Utilisez la méthode fork() pour soumettre des tâches au pool de threads. fork() 方法提交任务到线程池。
  4. 获取结果:使用 join() 方法获取任务的执行结果。

实战案例:斐波那契数列

使用 Fork/Join 框架计算斐波那契数列:

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

class FibonacciTask extends RecursiveTask<Long> {

    private final int n;

    public FibonacciTask(int n) {
        this.n = n;
    }

    @Override
    public Long compute() {
        if (n <= 1) {
            return (long) n;
        } else {
            FibonacciTask leftTask = new FibonacciTask(n - 1);
            FibonacciTask rightTask = new FibonacciTask(n - 2);
            leftTask.fork();
            rightTask.fork();
            return leftTask.join() + rightTask.join();
        }
    }
}

public class FibonacciForkJoin {

    public static void main(String[] args) {
        ForkJoinPool pool = new ForkJoinPool();
        int n = 40;
        FibonacciTask task = new FibonacciTask(n);
        Long result = pool.invoke(task);
        System.out.println("斐波那契数列第 " + n + " 项为:" + result);
    }
}
Copier après la connexion

这个示例创建了一个 FibonacciTask 类,它重写了 compute() 方法来计算斐波那契数列。它使用 fork() 方法将子任务提交到线程池,并使用 join() 方法获取结果。FibonacciForkJoin 类创建一个 ForkJoinPool 并提交 FibonacciTask

🎜Obtenir le résultat : 🎜Utilisez la méthode join() pour obtenir le résultat de l'exécution de la tâche. 🎜🎜🎜Cas pratique : Séquence de Fibonacci🎜🎜🎜Utilisez le framework Fork/Join pour calculer la séquence de Fibonacci :🎜rrreee🎜Cet exemple crée une classe FibonacciTask, qui a réécrit le compute() pour calculer la séquence de Fibonacci. Il utilise la méthode fork() pour soumettre des sous-tâches au pool de threads et la méthode join() pour obtenir les résultats. La classe FibonacciForkJoin crée un ForkJoinPool et soumet une FibonacciTask, puis récupère et imprime les résultats. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal