Maison  >  Article  >  Java  >  Comment utiliser efficacement les pools de threads pour implémenter la programmation simultanée en Java ?

Comment utiliser efficacement les pools de threads pour implémenter la programmation simultanée en Java ?

王林
王林original
2024-05-02 08:27:011183parcourir

Comment utiliser efficacement les pools de threads pour implémenter la programmation simultanée en Java ? Créez un pool de threads et pré-attribuez un ensemble de threads. Soumettez la tâche au pool de threads et le thread obtient la tâche de la file d'attente pour exécution. Les threads du pool de threads sont responsables de l'acquisition et de l'exécution des tâches dans la file d'attente, et les tâches terminées sont automatiquement supprimées de la file d'attente.

如何在 Java 中高效使用线程池实现并发编程?

Comment utiliser efficacement les pools de threads pour implémenter la programmation simultanée en Java

Introduction aux pools de threads

Les pools de threads sont une structure de données spéciale utilisée pour gérer les threads. Il pré-alloue un ensemble de threads et en alloue les threads selon les besoins pour effectuer des tâches. Cela évite la création et la destruction fréquentes de threads, améliorant ainsi les performances et l'efficacité.

Java Thread Pool

Le pool de threads en Java peut être créé par :

ExecutorService executor = Executors.newFixedThreadPool(5);

Parmi eux, newFixedThreadPool crée un pool de threads de taille fixe contenant 5 threads. newFixedThreadPool 创建了一个固定大小的线程池,其中有 5 个线程。

任务提交

可以通过以下方式将任务提交到线程池:

executor.submit(task);

其中,task 是要执行的任务。

任务执行

线程池中的线程负责从队列中获取任务并执行它们。执行完成的任务会自动从队列中删除。

实战案例

以下是一个使用线程池进行并发处理的示例:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ThreadPoolExample {

    public static void main(String[] args) {
        // 创建一个固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(5);

        // 创建任务列表
        List<Integer> numbers = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            numbers.add(i);
        }

        // 将任务提交到线程池
        List<Future<Integer>> futures = new ArrayList<>();
        for (int number : numbers) {
            Future<Integer> future = executor.submit(() -> {
                return number * number;
            });
            futures.add(future);
        }

        // 获取任务结果
        List<Integer> results = new ArrayList<>();
        for (Future<Integer> future : futures) {
            try {
                results.add(future.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        // 关闭线程池
        executor.shutdown();
    }
}

在这个示例中,ThreadPoolExample 类:

  1. 创建一个有 5 个线程的线程池 (executor)。
  2. 创建一个包含 10000 个数字的列表 (numbers)。
  3. 将每个数字作为一个任务提交到线程池 (executor.sumbit)。
  4. 获取每个任务的结果并将其添加到 results
  5. Soumission de tâches
🎜Les tâches peuvent être soumises au pool de threads par : 🎜rrreee🎜où, tâche est la tâche à exécuter. 🎜🎜🎜Exécution des tâches🎜🎜🎜Les threads du pool de threads sont chargés d'extraire les tâches de la file d'attente et de les exécuter. Les tâches terminées sont automatiquement supprimées de la file d'attente. 🎜🎜🎜Cas pratique🎜🎜🎜Ce qui suit est un exemple d'utilisation d'un pool de threads pour un traitement simultané : 🎜rrreee🎜Dans cet exemple, la classe ThreadPoolExample : 🎜
    🎜Créez un thread avec 5 threads Pool de threads (exécuteur). 🎜🎜Créez une liste de 10 000 numéros (numéros). 🎜🎜Soumettez chaque numéro en tant que tâche au pool de threads (executor.sumbit). 🎜🎜Obtenez les résultats de chaque tâche et ajoutez-les à results. 🎜🎜Fermez le pool de threads. 🎜🎜

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