Maison >Java >javaDidacticiel >Comment utiliser les pools de threads dans Java 7 pour mettre en œuvre une exécution ordonnée des tâches et la collecte des résultats

Comment utiliser les pools de threads dans Java 7 pour mettre en œuvre une exécution ordonnée des tâches et la collecte des résultats

PHPz
PHPzoriginal
2023-07-30 09:53:10881parcourir

Comment utiliser les pools de threads dans Java 7 pour obtenir une exécution ordonnée et une collecte des résultats des tâches

Dans la programmation multithread moderne, les pools de threads sont un concept important qui permet de gérer et d'exécuter plusieurs tâches plus efficacement. Dans Java 7, nous pouvons créer et gérer des pools de threads à l'aide de la classe ThreadPoolExecutor. Cet article explique comment utiliser les pools de threads dans Java 7 pour implémenter l'exécution ordonnée des tâches et la collecte des résultats.

Le concept d'un pool de threads est de gérer une file d'attente de tâches et d'éviter la création et la destruction fréquentes de threads en réutilisant les objets de thread existants. Grâce au pool de threads, nous pouvons facilement contrôler le nombre de tâches simultanées et collecter les résultats renvoyés une fois l'exécution de la tâche terminée.

Tout d'abord, nous devons créer un objet ThreadPoolExecutor, qui est responsable de la gestion de la création et de la configuration du pool de threads. Vous pouvez utiliser les méthodes statiques de la classe Executors pour créer un pool de threads, ou vous pouvez le configurer vous-même. Voici un exemple de création d'un pool de threads :

ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);

Avant que les tâches ne soient mises en file d'attente et prêtes à être exécutées, nous devons créer un ensemble de tâches. Ces tâches peuvent être des classes qui implémentent l'interface Runnable ou l'interface Callable. L'interface Runnable contient uniquement une méthode run(), tandis que l'interface Callable contient une méthode call() qui peut renvoyer le résultat de l'exécution.

Voici un exemple qui montre comment créer un ensemble de tâches :

List<Callable<Integer>> tasks = new ArrayList<>();
tasks.add(new Task(1));
tasks.add(new Task(2));
tasks.add(new Task(3));

Dans l'exemple ci-dessus, nous avons créé trois objets Task et les avons ajoutés à la liste des tâches. Ces objets Task sont des classes qui implémentent l’interface Callable, et leur méthode call() renverra un résultat de type Integer.

Ensuite, nous devons soumettre la tâche au pool de threads pour exécution. La classe ThreadPoolExecutor fournit une méthode submit() qui accepte les tâches et les place dans la file d'attente des tâches en attente d'exécution. La méthode submit() renvoie également un objet Future pour obtenir les résultats de la tâche.

Voici un exemple qui montre comment soumettre une tâche et obtenir les résultats :

List<Future<Integer>> results = executor.invokeAll(tasks);

Dans l'exemple ci-dessus, la méthode invoqueAll() transmet la liste des tâches à l'objet ThreadPoolExecutor et renvoie une liste d'objets Future. Nous pouvons utiliser cette liste renvoyée pour obtenir les résultats de chaque tâche.

Enfin, nous pouvons obtenir les résultats d'exécution de chaque tâche en parcourant la liste des objets Future. L'objet Future fournit une méthode get(), qui est utilisée pour bloquer l'attente de la fin de l'exécution de la tâche et renvoyer le résultat.

Voici un exemple qui montre comment obtenir les résultats d'exécution :

for (Future<Integer> result : results) {
    try {
        System.out.println("Task result: " + result.get());
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
}

Dans l'exemple ci-dessus, nous avons utilisé une boucle for pour parcourir la liste des objets Future et obtenir les résultats de chaque tâche à l'aide de la méthode get(). Puisque la méthode get() peut lancer InterruptedException et ExecutionException, nous devons gérer les exceptions.

En utilisant le pool de threads, nous pouvons facilement mettre en œuvre l'exécution ordonnée des tâches et la collecte des résultats. Le pool de threads fournit un mécanisme de gestion et de planification flexible, et la taille du pool de threads et l'exécution des tâches peuvent être configurées en fonction des besoins réels.

Dans cet article, nous utilisons la classe ThreadPoolExecutor fournie par Java 7 pour créer et gérer des pools de threads, et mettre en œuvre une exécution ordonnée des tâches et la collecte des résultats en soumettant des tâches et en obtenant des résultats.

Ce qui précède est une introduction à la façon d'utiliser les pools de threads dans Java 7 pour mettre en œuvre une exécution ordonnée des tâches et la collecte des résultats. J'espère que cet article vous aidera à apprendre la programmation multithread !

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!

Déclaration:
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