Maison Java javaDidacticiel Pool de threads en Java

Pool de threads en Java

Jun 15, 2023 pm 08:51 PM
java 多线程 线程池

En Java, les pools de threads sont utilisés pour gérer des tâches telles que la création, la maintenance et la destruction de threads. Le pool de threads contient un groupe de threads et une file d'attente de tâches. Lorsqu'une tâche doit être exécutée, les threads du pool de threads obtiendront automatiquement la tâche et l'exécuteront. Une fois la tâche exécutée, le thread sera également recyclé dans le pool de threads. pool de threads pour réutilisation.

L'API de pool de threads en Java fournit une classe Executors pour nous aider à créer un pool de threads et fournit quatre méthodes d'implémentation de pool de threads : FixedThreadPool, CachedThreadPool, SingleThreadExecutor et ScheduledThreadPool.

FixedThreadPool

Un pool de threads de taille fixe Ce n'est que lorsque le nombre de threads de travail n'atteint pas la taille du pool de threads qu'un nouveau thread sera créé pour effectuer des tâches. Le pool de threads peut spécifier le nombre maximum de threads via le constructeur. S'il n'est pas spécifié, la valeur par défaut est Integer.MAX_VALUE.

Exemple de code :

ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
    executorService.execute(()->{
        System.out.println(Thread.currentThread().getName()+" is executing task ");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
}
Copier après la connexion

Résultat d'exécution :

pool-1-thread-1 is executing task 
pool-1-thread-3 is executing task 
pool-1-thread-5 is executing task 
pool-1-thread-2 is executing task 
pool-1-thread-4 is executing task 
pool-1-thread-5 is executing task 
pool-1-thread-3 is executing task 
pool-1-thread-1 is executing task 
pool-1-thread-2 is executing task 
pool-1-thread-4 is executing task 
Copier après la connexion

CachedThreadPool

Pool de threads pouvant être mis en cache lorsque le nombre de threads dépasse le nombre actuellement requis, les threads excédentaires seront recyclés dans le pool de threads lorsqu'ils ne sont pas nécessaires. sera automatiquement détruit. Si le pool de threads n'a aucun thread disponible et qu'une nouvelle tâche arrive, le pool de threads créera un nouveau thread pour exécuter la tâche jusqu'à ce que la taille du pool de threads atteigne la limite de Integer.MAX_VALUE.

Exemple de code :

ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
    executorService.execute(()->{
        System.out.println(Thread.currentThread().getName()+" is executing task ");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
}
Copier après la connexion

Résultat d'exécution :

pool-1-thread-1 is executing task 
pool-1-thread-2 is executing task 
pool-1-thread-3 is executing task 
pool-1-thread-4 is executing task 
pool-1-thread-5 is executing task 
pool-1-thread-6 is executing task 
pool-1-thread-7 is executing task 
pool-1-thread-8 is executing task 
pool-1-thread-9 is executing task 
pool-1-thread-10 is executing task 
Copier après la connexion

SingleThreadExecutor

Un pool de threads monothread, avec un seul thread de travail, peut garantir que toutes les tâches sont exécutées dans l'ordre spécifié (FIFO, LIFO, priorité, etc.) , ce qui équivaut à un FixedThreadPool spécial.

Exemple de code :

ExecutorService executorService = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
    executorService.execute(()->{
        System.out.println(Thread.currentThread().getName()+" is executing task ");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
}
Copier après la connexion

Résultat d'exécution :

pool-1-thread-1 is executing task 
pool-1-thread-1 is executing task 
pool-1-thread-1 is executing task
......
Copier après la connexion

ScheduledThreadPool

Le pool de threads planifiés peut exécuter des tâches en fonction du délai spécifié ou périodiquement, et peut implémenter des tâches planifiées ou des tâches périodiques. La taille du pool de threads peut être spécifiée. Si elle n'est pas spécifiée, sa valeur par défaut est Integer.MAX_VALUE.

Exemple de code :

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
ScheduledFuture<?> future = scheduledExecutorService.schedule(()->{
    System.out.println(Thread.currentThread().getName()+" is executing delay task ");
}, 5, TimeUnit.SECONDS);
scheduledExecutorService.scheduleAtFixedRate(()->{
    System.out.println(Thread.currentThread().getName()+" is executing periodic task ");
}, 2, 3, TimeUnit.SECONDS);
Copier après la connexion

Résultats d'exécution :

pool-1-thread-1 is executing periodic task 
pool-1-thread-2 is executing periodic task 
pool-1-thread-3 is executing periodic task 
pool-1-thread-1 is executing periodic task 
pool-1-thread-3 is executing periodic task 
pool-1-thread-2 is executing periodic task 
pool-1-thread-3 is executing periodic task 
pool-1-thread-2 is executing periodic task 
......
pool-1-thread-1 is executing delay task 
Copier après la connexion

Résumé

Le pool de threads est un concept extrêmement important dans le développement multithread, qui peut réduire efficacement la surcharge de création, de destruction et de changement de contexte des threads, améliorer les performances et la maintenabilité du système. . Java fournit la classe Executors pour créer facilement des pools de threads et propose différentes méthodes d'implémentation pour gérer différents scénarios d'application. Lorsque les développeurs utilisent des pools de threads, ils doivent choisir une méthode d'implémentation appropriée en fonction des besoins spécifiques et des conditions de charge pour obtenir les meilleures performances et effets.

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Racine carrée en Java

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Nombre parfait en Java

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Générateur de nombres aléatoires en Java

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Weka en Java

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Numéro Armstrong en Java

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Numéro de Smith en Java

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Questions d'entretien chez Java Spring

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Break or Return of Java 8 Stream Forach?

See all articles