La technologie des pools de threads est souvent utilisée dans le développement multi-thread Java. Cet article est une explication détaillée des sept paramètres lors de la création d'un pool de threads Java.
Comme le montre le code source, le constructeur du pool de threads a 7 paramètres
Ces 7 paramètres sont :
corePoolSize : Nombre de threads principaux.
maximumPoolSize : Nombre maximum de threads.
keepAliveTime : temps de survie des threads inactifs.
TimeUnit : unité de temps.
BlockingQueue : file d'attente des tâches du pool de threads.
ThreadFactory : Usine de création de threads.
RejectedExecutionHandler : Stratégie de rejet.
Ces 7 paramètres seront expliqués un par un ci-dessous.
1. corePoolSize taille du thread principal du pool de threads
Le pool de threads conservera un nombre minimum de threads Même si ces threads gèrent l'état inactif, ils ne seront pas détruits à moins d'autoriserCoreThreadTimeOut. est réglé. Le nombre minimum de threads ici est corePoolSize.
2. maximumPoolSize Le nombre maximum de threads dans le pool de threads
Après qu'une tâche soit soumise au pool de threads, elle découvrira d'abord s'il y a des threads survivants libres, et si c'est le cas, la tâche sera transmise directement. Ce thread inactif sera exécuté. Sinon, il sera mis en cache dans la file d'attente de travail (sera introduit plus tard). Si la file d'attente de travail est pleine, un nouveau thread sera créé. puis une tâche sera retirée de la tête de la file d'attente de travail et transmise au nouveau thread pour traitement, et placera la tâche nouvellement soumise dans la queue de la file d'attente de travail. Le pool de threads ne créera pas de nouveaux threads sans limite. Il aura une limite sur le nombre maximum de threads, spécifié par maximumPoolSize.
3. keepAliveTime Temps de survie du thread inactif
Si un thread est inactif et que le nombre actuel de threads est supérieur à corePoolSize, alors le thread inactif sera détruit après le temps spécifié , le temps spécifié ici est défini par keepAliveTime
4. unité de temps de survie du thread inactif
keepAliveTime unité de mesure
5. workQueue work Queue# 🎜🎜#
Après qu'une nouvelle tâche soit soumise, elle entrera d'abord dans cette file d'attente de travail, puis la tâche sera retirée de la file d'attente lors de la planification des tâches. Quatre files d'attente de travail sont fournies dans jdk :
①ArrayBlockingQueue
File d'attente de blocage délimitée basée sur un tableau, triée par FIFO. Une fois qu'une nouvelle tâche arrive, elle sera placée à la fin de la file d'attente. Le tableau limité peut éviter les problèmes d'épuisement des ressources. Lorsque le nombre de threads dans le pool de threads atteint corePoolSize et qu'une nouvelle tâche arrive, la tâche sera placée à la fin de la file d'attente, en attente d'être planifiée. Si la file d'attente est déjà pleine, un nouveau thread est créé. Si le nombre de threads a atteint maxPoolSize, la politique de rejet sera exécutée.
②LinkedBlockingQuene
File d'attente de blocage illimitée basée sur une liste chaînée (en fait, la capacité maximale est Interger.MAX), triée selon FIFO. En raison de la nature approximativement illimitée de la file d'attente, lorsque le nombre de threads dans le pool de threads atteint corePoolSize, les nouvelles tâches seront stockées dans la file d'attente sans créer de nouveaux threads jusqu'à maxPoolSize. Par conséquent, lors de l'utilisation de cette file d'attente de travail, le paramètre maxPoolSize en fait. ça ne marche pas.
③SynchronousQuene
Une file d'attente de blocage qui ne met pas en cache les tâches Le producteur met une tâche et doit attendre que le consommateur retire la tâche. C'est-à-dire que lorsqu'une nouvelle tâche arrive, elle ne sera pas mise en cache, mais sera directement planifiée pour exécuter la tâche. S'il n'y a pas de threads disponibles, un nouveau thread sera créé si le nombre de threads atteint maxPoolSize. une politique de rejet sera exécutée.
④PriorityBlockingQueue
File d'attente de blocage illimitée avec priorité, la priorité est implémentée via le paramètre Comparator.
6. threadFactory thread factory
Factory utilisé lors de la création d'un nouveau thread, peut être utilisé pour définir le nom du thread, s'il s'agit d'un thread démon, etc.#🎜🎜 ##🎜 🎜#7. Politique de rejet du gestionnaire
Lorsque les tâches dans la file d'attente de travail ont atteint la limite maximale et que le nombre de threads dans le pool de threads a également atteint la limite maximale, comment gérer si une nouvelle tâche est soumise ? La politique de rejet ici vise à résoudre ce problème. Le JDK propose 4 politiques de rejet :
①CallerRunsPolicy
Sous cette politique, l'exécution directe dans le thread appelant est rejetée. La tâche, à moins que le pool de threads n'ait été arrêté, abandonnera directement la tâche.
②AbortPolicy
En vertu de cette stratégie, la tâche est directement ignorée et une RejectedExecutionException est levée.
③DiscardPolicy
Dans cette stratégie, la tâche est abandonnée directement et rien n'est fait.
④DiscardOldestPolicy
Dans le cadre de cette stratégie, supprimez la première tâche qui entre dans la file d'attente, puis essayez de mettre la tâche rejetée Entrez dans la file d'attente
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!