Comment implémenter le propre pool de threads de Springboot
One : ThreadPoolTaskExecuto
1 ThreadPoolTaskExecutor Pool de threads :
ThreadPoolTaskExecutor est l'encapsulation secondaire de Spring basée sur le propre pool de threads de Java, ThreadPoolExecutor. L'objectif principal est de rendre plus pratique l'utilisation des pools de threads dans le système Spring Framework. Pool de threads Spring
2 Utilisez ThreadPoolTaskExecutor pour injecter des beans dans ioc
Formulaire de fichier de configuration, Spring configurera automatiquement
## 默认线程池配置,ThreadPoolTaskExecutor # 核心线程数 spring.task.execution.pool.core-size=8 # 最大线程数 spring.task.execution.pool.max-size=16 # 空闲线程存活时间 spring.task.execution.pool.keep-alive=60s # 是否允许核心线程超时 spring.task.execution.pool.allow-core-thread-timeout=true # 线程队列数量 spring.task.execution.pool.queue-capacity=100 # 线程关闭等待 spring.task.execution.shutdown.await-termination=false spring.task.execution.shutdown.await-termination-period= # 线程名称前缀 spring.task.execution.thread-name-prefix=demo_Thread
Formulaire de configuration :
import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledFuture; //@Configuration public class ThreadConfig { @Value("${task.maxPoolSize}") private int maxPoolSize; //todo 其他的相关配置都可以通过配置文件中注入 @Bean("ThreadPoolTaskExecutor") public Executor myAsync() { final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setMaxPoolSize(maxPoolSize); //todo 其他参数设置 //初始化 executor.initialize(); return executor; } }
3 Après la création des threads, tous les pools de threads sont obtenus à partir d'ioc
4 Processus de traitement du pool de threads :
(1) Vérifiez si le pool de threads principaux est plein. Sinon, créez un thread pour effectuer la tâche. Si le nombre de threads principaux est plein, vérifiez si la file d'attente des tâches est pleine. Sinon, stockez le thread dans. la file d'attente des tâches. Si la file d'attente des tâches est pleine, vérifiez le nombre maximum de threads. Si le nombre n'est pas satisfait, créez un thread pour exécuter la tâche. Si elle est pleine, exécutez-la conformément à la politique de rejet.
- CallerRunsPolicy() : exécution du thread d'origine
- AbortPolicy() : lancer une exception directement
- DiscardOldestPolicy() : supprimer la tâche la plus ancienne de la file d'attente
- 2: ThreadPoolTasksCheduler
1 ThreadpoolTasksCheduler planifie régulièrement les pools de threads de tâche pour traiter les tâches asynchrones
2 Utilisation: Inject ThreadpoolTaskscheduler Bean
(1) Format de fichier de configuration: ..
(2) Format de la classe de configuration:rreea
3 Utilisez les tâches planifiées ThreadPoolTaskScheduler
pour utiliser le pool de threads ordinaire :
- soumettre (appelable), besoin d'exécuter le résultat
- soumettre (exécutable), aucun résultat d'exécution n'est requis
- (1) Tâche planifiée
Ajouter le contenu de la tâche Exécutable, définir le cycle d'exécution Déclencheur/Date, Expression de déclenchement Baidu peut
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ScheduledFuture; @Configuration public class ThreadPoolTaskSchedulerConfig { @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { final ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); //设置等待任务在关机时l候完成 threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); //设置等待时间为60s threadPoolTaskScheduler.setAwaitTerminationSeconds(60); return threadPoolTaskScheduler; } }
(2) Spécifier l'intervalle Temps d'exécution d'une tâche, l'intervalle de temps va de l'achèvement de la tâche précédente au début de la tâche suivante , en millisecondes
schedule(Runnable task,Trigger) schedule(Runnable task,Date)
(3) Exécutez des tâches à une fréquence fixe, exécutez de nouvelles tâches à intervalles réguliers après le début de la tâche, si la dernière tâche est terminée, puis attendez que la tâche suivante soit exécutée une fois la dernière exécution de la tâche terminée
scheduleWithFixedDelay(Runnable task,long delay)
(4) Annulation de tâche planifiée :
Définissez la collection pour le stockage des tâches planifiées. Le résultat de l'exécution de la tâche planifiée est ScheduledFuture>, et stockez l'objet dans la collection, annulez la tâche planifiée en obtenant le ScheduledFuture > object.cancel(true) dans la collection
scheduleAtFixedRate(Runnable task,long delay)
Trois @Scheduled implémente la tâche planifiée, l'annotation active la tâche planifiée
1 Utilisez @EnableScheduled pour activer la prise en charge
2 @Méthode d'annotation planifiée
(1) @ Scheduled(fixedDelay=5000) exécution différée, exécutée après 5 secondes
(2) @Scheduled(fixedRate=5000) exécution planifiée, exécutée toutes les cinq secondes (3) @Scheduled(corn="002* *?") Exécution personnalisée, maïs expression Baidu, cette méthode d'exécution est couramment utilisée, corn="002**?"Commencez à exécuter les tâches planifiées à deux heures du matin tous les jours
3 Notez que les tâches démarrées par @Scheduled sont monothread, facile à bloquer
(1) Injectez ThreadPoolTaskScheduler dans ioc, puis Scheduled utilisera le pool de threads ThreadPoolTaskScheduler, ce qui peut résoudre le problème de blocage d'un seul thread
(2) Les annotations @Scheduled et @Async activent les tâches planifiées, spécifiées dans @Async("pool" ) Pool de threads, s'il n'y a pas de pool de threads spécifié, le pool de threads SimpleAsyncTaskExecutor de Spring sera utilisé. Ce pool de threads ajoutera un thread pour exécuter la tâche à chaque fois, ce qui est inefficace 4 : Tâches asynchrones au Spring
1 @EnableAsync tourne. sur le support asynchrone
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Service; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.*; @Service public class SchedulerService { @Autowired ThreadPoolTaskScheduler scheduler; /** * 常规线程池使用 */ public void tesScheduler1() throws ExecutionException, InterruptedException { //无返回值 final Future<?> demo_scheduler1 = scheduler.submit(new Runnable() { @Override public void run() { System.out.println("demo runnable scheduler"); } }); //无返回值 final Future<?> demo_scheduler2 = scheduler.submit(new Callable<Object>() { @Override public Object call() throws Exception { System.out.println("demo callable scheduler"); return "callable"; } }); System.out.println("result:" + demo_scheduler2.get()); } /** * 定时任务 */ public void tesScheduler2() throws ParseException { //CronTrigger表达式百度即可 scheduler.schedule(() -> { System.out.println("定时任务"); }, new CronTrigger("0/1****?")); //创建指定时间的日期 final Date date = new Date(2023, 3, 26, 21, 35); final DateFormat format = new SimpleDateFormat(); final Date parse = format.parse("2023-03-26-21-26"); scheduler.schedule(() -> { System.out.println(new Date()); }, parse); } /** * 指定时间间隔执行任务,上次任务结束到下次任务开始的时间间隔 */ public void tesScheduler3() { scheduler.scheduleWithFixedDelay(() -> { //todo }, 300L); } /** * 固定频率执行任务,在固定一段时间后便会执行下次任务, * 如果时间到了上次任务还没执行完毕则等待, * 直到上一次任务执行完毕后立马执行下次任务 */ public void tesScheduler4() { scheduler.scheduleAtFixedRate(new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { return null; } }), 200); } //取消定时任务队列 public static ConcurrentMap<String, ScheduledFuture> map = new ConcurrentHashMap<>(); public void startTask(String k1) { map.compute(k1, (k, v) -> { if (map.containsKey(k)) return v; map.put(k, v); return v; }); } }
Five: Present ; un pool de threads Java personnalisé :
import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @Service public class AsyncService { @Async public void showThreadName1() { //默认线程池 System.out.println(Thread.currentThread().getName()); } @Async("myPool")//指定线程池 public void showThreadName2() { System.out.println(Thread.currentThread().getName()); } }
le propre pool de threads de Java, cache, numéro fixe, monothread, chronométré,,,, six ou sept types, à suivre plus tard
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Bonjour à tous, je suis M. Zhanshu ! Comme le dit le proverbe : ne serait-il pas formidable d’avoir des amis de loin ? C'est une chose très heureuse d'avoir des amis qui viennent jouer avec nous, nous devons donc faire de notre mieux pour être propriétaires et emmener nos amis jouer ! La question est donc de savoir quel est le meilleur moment, où aller et quel est l’endroit le plus amusant ? Aujourd'hui, je vais vous apprendre étape par étape comment utiliser le pool de threads pour explorer les informations sur les attractions, examiner les données du même voyage et créer un nuage de mots et une visualisation des données ! ! ! Informez-vous des informations sur les attractions touristiques de différentes villes. Avant de commencer à explorer les données, commençons par comprendre les threads. Processus de thread : un processus est une activité de code en cours d'exécution sur une collection de données. Il s'agit de l'unité de base de l'allocation et de la planification des ressources dans le système. Thread : Il s’agit d’un processus léger, de la plus petite unité d’exécution de programme et d’un chemin d’exécution du processus. un

Linux est un excellent système d'exploitation largement utilisé dans les systèmes serveurs. Lors de l'utilisation des systèmes Linux, les problèmes de charge du serveur sont un phénomène courant. La charge du serveur signifie que les ressources système du serveur ne peuvent pas satisfaire les demandes actuelles, ce qui rend la charge du système trop élevée, affectant ainsi les performances du serveur. Cet article présentera les problèmes courants de charge de serveur et leurs solutions sous les systèmes Linux. 1. La charge du processeur est trop élevée. Lorsque la charge du processeur du serveur est trop élevée, cela entraînera des problèmes tels qu'une réponse plus lente du système et un temps de traitement des requêtes plus long. Quand C

Comment utiliser des pools de threads pour implémenter la planification cyclique des tâches dans Java 7 Introduction : lors du développement d'applications Java, l'utilisation de pools de threads peut améliorer l'efficacité de l'exécution des tâches et l'utilisation des ressources. En Java7, le pool de threads peut être utilisé pour implémenter facilement une planification circulaire des tâches. Cet article expliquera comment utiliser les pools de threads pour implémenter la planification circulaire des tâches dans Java7 et joindra des exemples de code correspondants. 1. Présentation : le pool de threads est une structure de traitement multithread qui peut réutiliser un nombre fixe de threads pour éviter la création et la création fréquentes.

Comment utiliser les pools de threads pour implémenter la planification prioritaire des tâches dans Java7 Dans la programmation simultanée, la planification prioritaire des tâches est une exigence courante. Java fournit un mécanisme de pool de threads qui nous permet de gérer et de planifier facilement des tâches. Cet article explique comment utiliser le pool de threads pour implémenter la planification par priorité des tâches dans Java7. Tout d’abord, nous devons comprendre les concepts de base et l’utilisation des pools de threads en Java7. Un pool de threads est un mécanisme de réutilisation de threads qui gère et planifie un groupe de threads pour effectuer plusieurs tâches. Mention Java

Avec l'application généralisée de l'architecture des microservices dans les applications d'entreprise, la manière d'optimiser les performances et la stabilité des microservices est également devenue le centre d'attention. Dans les microservices, un microservice peut gérer des milliers de requêtes, et le pool de threads et la planification des tâches du service sont également des composants importants des performances et de la stabilité du microservice. Cet article présentera les pools de threads et la planification des tâches dans l'architecture des microservices, ainsi que comment optimiser les performances des pools de threads et la planification des tâches dans les microservices. 1. Pool de threads dans l'architecture microservice Dans l'architecture microservice, chaque requête traitée par le microservice occupera son pool de threads.

Avec le développement de la technologie Internet, l’importance de la programmation multithread est devenue de plus en plus importante. Lors de l'écriture de programmes à haute concurrence, l'utilisation complète de la technologie multithread peut considérablement améliorer l'efficacité d'exécution du programme. Cependant, la programmation multithread elle-même implique de nombreux problèmes, tels que la communication entre les threads, la coopération en matière de synchronisation, etc. Afin de résoudre ces problèmes, Java fournit de nombreux frameworks de pools de threads, parmi lesquels ExecutorCompletionService en fait partie. Cet article présentera ExecutorCompletionServi

Méthodes pour configurer le pool de threads Spring : 1. Utilisez ThreadPoolTaskExecutor Bean ; 2. Utilisez SimpleAsyncTaskExecutor ; 3. Utilisez TaskExecutor Bean en XML 4. Utilisez des bibliothèques tierces ; 6. Configurez via les propriétés système ou les variables d'environnement ; 7. Intégration et conteneurs ; 8. Configuration programmatique ; 9. Intégration à l'aide de frameworks tiers ; 11. Tenir compte des limitations et contraintes des ressources ;

1 : ThreadPoolTaskExecuto1 ThreadPoolTaskExecutor Pool de threads : ThreadPoolTaskExecutor est une encapsulation secondaire de Spring basée sur le propre pool de threads de Java, ThreadPoolExecutor. L'objectif principal est de rendre plus pratique l'utilisation des pools de threads dans le système de framework Spring. .Utilisez ThreadPoolTaskExecutor pour injecter des beans Accédez au formulaire du fichier de configuration dans ioc, Spring configurera automatiquement ##Configuration du pool de threads par défaut, ThreadPoolTaskExecutor#Core.
