Maison Java javaDidacticiel Introduction à l'interface et au type de TaskExecutor

Introduction à l'interface et au type de TaskExecutor

Jun 25, 2017 am 09:39 AM
实例

Interface TaskExecutor

L'interface TaskExecutor de Spring est équivalente à l'interface Java.util.concurrent.Executor. En fait, la principale raison de son existence est d’abstraire la dépendance à Java 5 lors de l’utilisation de pools de threads. Cette interface n'a qu'une seule méthode execute(Runnable task), qui accepte une tâche d'exécution selon la sémantique et la configuration du pool de threads.
TaskExecutor a été créé à l'origine pour fournir une abstraction de pool de threads à d'autres composants Spring en cas de besoin. Par exemple, le composant ApplicationEventMulticaster, AbstractMessageListenerContainer de JMS et l'intégration de Quartz utilisent tous l'abstraction TaskExecutor pour fournir un pool de threads. Bien entendu, vous pouvez également utiliser cette couche d'abstraction si vos beans nécessitent un comportement de pool de threads.

2 Type TaskExecutor

Il existe certaines implémentations de TaskExecutor prédéfinies dans le package de distribution Spring. Avec eux, vous n’avez même plus besoin de le mettre en œuvre vous-même.

  • Classe SimpleAsyncTaskExecutor

Cette implémentation ne réutilise aucun thread ou démarre un nouveau thread à chaque fois qu'elle est appelée. Cependant, il prend toujours en charge la définition d'une limite sur le nombre total de threads simultanés. Lorsque la limite sur le nombre total de threads simultanés est dépassée, les nouveaux appels seront bloqués jusqu'à ce qu'une position soit libérée. Si vous avez besoin d’une vraie piscine, lisez la suite.

  • Classe SyncTaskExecutor

Cette implémentation ne s'exécutera pas de manière asynchrone. Au lieu de cela, chaque appel est exécuté dans le thread à l’origine de l’appel. Son utilisation principale est lorsque le multithreading n'est pas requis, comme dans les cas de test simples.

  • Classe ConcurrentTaskExecutor

Cette implémentation est un wrapper pour la classe Java 5 java.util.concurrent.Executor. Il existe une autre alternative, la classe ThreadPoolTaskExecutor, qui expose les paramètres de configuration de l'Executor en tant que propriétés du bean. Il est rarement nécessaire d'utiliser ConcurrentTaskExecutor, mais si ThreadPoolTaskExecutor ne suffit pas, ConcurrentTaskExecutor est une autre alternative.

  • Classe SimpleThreadPoolTaskExecutor

Cette implémentation est en fait une sous-classe de la classe SimpleThreadPool de Quartz, qui écoute les rappels du cycle de vie de Spring. Il s'agit de son utilisation typique lorsque vous disposez d'un pool de threads qui doit être partagé entre des composants Quartz et non-Quartz.

  • Classe ThreadPoolTaskExecutor

Elle ne prend en charge aucun remplacement ou downport du package java.util.concurrent. Les implémentations de java.util.concurrent par Doug Lea et Dawid Kurzyniec utilisent des structures de packages différentes, ce qui les empêche de fonctionner correctement.

Cette implémentation ne peut être utilisée que dans l'environnement Java 5, mais c'est la plus couramment utilisée dans cet environnement. Les propriétés du bean qu'il expose peuvent être utilisées pour configurer un java.util.concurrent.ThreadPoolExecutor et l'envelopper dans un TaskExecutor. Si vous avez besoin d'une classe plus avancée, telle que ScheduledThreadPoolExecutor, nous vous recommandons d'utiliser plutôt ConcurrentTaskExecutor.

  • Classe TimerTaskExecutor

Cette implémentation utilise une TimerTask comme implémentation derrière elle. La différence entre celui-ci et SyncTaskExecutor est que l'appel de méthode est effectué dans un thread distinct, bien qu'il soit synchronisé dans ce thread.

  • Classe WorkManagerTaskExecutor

CommonJ est un ensemble de spécifications développées conjointement par BEA et IBM. Ces spécifications ne sont pas des normes Java ee, mais ce sont des normes communes pour les implémentations de serveurs d'applications BEA et IBM

Cette implémentation utilise CommonJ WorkManager comme implémentation sous-jacente et est la plus importante pour configurer les applications CommonJ WorkManager dans la classe de contexte Spring. . Semblable à SimpleThreadPoolTaskExecutor, cette classe implémente l'interface WorkManager, elle peut donc être utilisée directement comme WorkManager.

Trois exemples simples de TaskExcutor

1 taskExcutor

package com.test;import org.springframework.core.task.TaskExecutor;public class MainExecutor {     private TaskExecutor taskExecutor;  public MainExecutor (TaskExecutor taskExecutor) {      this.taskExecutor = taskExecutor;    
        }  public void printMessages() {      for(int i = 0; i < 25; i++) {        
                taskExecutor.execute(new MessagePrinterTask("Message" + i));      
            }    
        }  
          
          private class MessagePrinterTask implements Runnable {      private String message;      public MessagePrinterTask(String message) {        this.message = message;      
            }      public void run() {        
                System.out.println(message);      
            }  
        } 
}
Copier après la connexion
Afficher le code

2 principaux

package com.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TaskTest {//本地测试,不用部署到tomcatpublic static void main(String[] args) {
        System.out.println("测试任务调度开始..."); 
        ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");     
        MainExecutor te = (MainExecutor)appContext.getBean("taskExecutorExample");  
        te.printMessages();  
        System.out.println("--------"); 
    } 
}
Copier après la connexion
Afficher le code

3.applicationContext.xml配置

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/spring-beans.dtd"><beans>

 <bean id="taskExecutorExample" class="com.test.MainExecutor">
   <constructor-arg ref="taskExecutor" />
 </bean>

  <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">  <property name="corePoolSize" value="5" />  <property name="maxPoolSize" value="10" />  <property name="queueCapacity" value="25" />
  </bean></beans>
Copier après la connexion
View Code

 

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

Exemples SVM en Python Exemples SVM en Python Jun 11, 2023 pm 08:42 PM

Support Vector Machine (SVM) en Python est un puissant algorithme d'apprentissage supervisé qui peut être utilisé pour résoudre des problèmes de classification et de régression. SVM fonctionne bien lorsqu'il s'agit de données de grande dimension et de problèmes non linéaires, et est largement utilisé dans l'exploration de données, la classification d'images, la classification de textes, la bioinformatique et d'autres domaines. Dans cet article, nous présenterons un exemple d'utilisation de SVM pour la classification en Python. Nous utiliserons le modèle SVM de la bibliothèque scikit-learn

Exemple de démarrage de VUE3 : création d'un lecteur vidéo simple Exemple de démarrage de VUE3 : création d'un lecteur vidéo simple Jun 15, 2023 pm 09:42 PM

Alors que la nouvelle génération de frameworks front-end continue d'émerger, VUE3 est apprécié comme un framework front-end rapide, flexible et facile à utiliser. Ensuite, apprenons les bases de VUE3 et créons un simple lecteur vidéo. 1. Installez VUE3 Tout d'abord, nous devons installer VUE3 localement. Ouvrez l'outil de ligne de commande et exécutez la commande suivante : npminstallvue@next. Ensuite, créez un nouveau fichier HTML et introduisez VUE3 : &lt;!doctypehtml&gt;

Découvrez des exemples de bonnes pratiques de conversion de pointeur dans Golang Découvrez des exemples de bonnes pratiques de conversion de pointeur dans Golang Feb 24, 2024 pm 03:51 PM

Golang est un langage de programmation puissant et efficace qui peut être utilisé pour développer diverses applications et services. Dans Golang, les pointeurs sont un concept très important, qui peut nous aider à exploiter les données de manière plus flexible et plus efficace. La conversion de pointeur fait référence au processus d'opérations de pointeur entre différents types. Cet article utilisera des exemples spécifiques pour découvrir les meilleures pratiques de conversion de pointeur dans Golang. 1. Concepts de base Dans Golang, chaque variable a une adresse, et l'adresse est l'emplacement de la variable en mémoire.

Exemple de développement d'un robot d'exploration Web simple PHP Exemple de développement d'un robot d'exploration Web simple PHP Jun 13, 2023 pm 06:54 PM

Avec le développement rapide d’Internet, les données sont devenues l’une des ressources les plus importantes à l’ère de l’information d’aujourd’hui. En tant que technologie qui obtient et traite automatiquement les données du réseau, les robots d'exploration Web attirent de plus en plus d'attention et d'applications. Cet article explique comment utiliser PHP pour développer un robot d'exploration Web simple et réaliser la fonction d'obtention automatique de données réseau. 1. Présentation de Web Crawler Le robot d'exploration Web est une technologie qui obtient et traite automatiquement les ressources réseau. Son principal processus de travail consiste à simuler le comportement du navigateur, à accéder automatiquement aux adresses URL spécifiées et à extraire toutes les informations.

Exemple d'algorithme VAE en Python Exemple d'algorithme VAE en Python Jun 11, 2023 pm 07:58 PM

VAE est un modèle génératif, son nom complet est VariationalAutoencoder, qui se traduit en chinois par auto-encodeur variationnel. Il s'agit d'un algorithme d'apprentissage non supervisé qui peut être utilisé pour générer de nouvelles données, telles que des images, de l'audio, du texte, etc. Comparés aux auto-encodeurs ordinaires, les VAE sont plus flexibles et plus puissants et peuvent générer des données plus complexes et plus réalistes. Python est l'un des langages de programmation les plus utilisés et l'un des principaux outils d'apprentissage en profondeur. En Python, il existe de nombreux excellents outils d'apprentissage automatique et profonds.

La relation entre le nombre d'instances Oracle et les performances de la base de données La relation entre le nombre d'instances Oracle et les performances de la base de données Mar 08, 2024 am 09:27 AM

La relation entre le nombre d'instances Oracle et les performances de la base de données La base de données Oracle est l'un des systèmes de gestion de bases de données relationnelles les plus connus du secteur et est largement utilisée dans le stockage et la gestion de données au niveau de l'entreprise. Dans la base de données Oracle, l'instance est un concept très important. L'instance fait référence à l'environnement d'exécution de la base de données Oracle en mémoire. Chaque instance possède une structure de mémoire et un processus d'arrière-plan indépendants, qui sont utilisés pour traiter les demandes des utilisateurs et gérer les opérations de la base de données. Le nombre d'instances a un impact important sur les performances et la stabilité de la base de données Oracle.

Exemples d'utilisation du code de vérification dans le framework Gin Exemples d'utilisation du code de vérification dans le framework Gin Jun 23, 2023 am 08:10 AM

Avec la popularité d'Internet, les codes de vérification sont devenus un processus nécessaire pour la connexion, l'enregistrement, la récupération du mot de passe et d'autres opérations. Dans le framework Gin, implémenter la fonction de code de vérification est devenu extrêmement simple. Cet article expliquera comment utiliser une bibliothèque tierce pour implémenter la fonction de code de vérification dans le framework Gin et fournira un exemple de code pour référence aux lecteurs. 1. Installer les bibliothèques dépendantes Avant d'utiliser le code de vérification, nous devons installer une bibliothèque tierce goCaptcha. Pour installer goCaptcha, vous pouvez utiliser la commande goget : $goget-ugithub

Exemple d'algorithme GAN en Python Exemple d'algorithme GAN en Python Jun 10, 2023 am 09:53 AM

Generative Adversarial Networks (GAN, Generative Adversarial Networks) est un algorithme d'apprentissage en profondeur qui génère de nouvelles données via deux réseaux de neurones en compétition. GAN est largement utilisé pour les tâches de génération dans les domaines de l'image, de l'audio, du texte et d'autres domaines. Dans cet article, nous utiliserons Python pour écrire un exemple d'algorithme GAN permettant de générer des images de chiffres manuscrits. Préparation de l'ensemble de données Nous utiliserons l'ensemble de données MNIST comme ensemble de données de formation. L'ensemble de données MNIST contient

See all articles