Maison > Java > javaDidacticiel > le corps du texte

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

王林
Libérer: 2024-05-02 08:27:01
original
1185 Les gens l'ont consulté

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);
Copier après la connexion

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

任务提交

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

executor.submit(task);
Copier après la connexion

其中,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();
    }
}
Copier après la connexion

在这个示例中,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!

É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