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); } } }
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("--------"); } }
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>
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

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)

Sujets chauds

La relation entre le nombre d'instances Oracle et les performances de la base de données

Exemples d'utilisation du code de vérification dans le framework Gin

Découvrez des exemples de bonnes pratiques de conversion de pointeur dans Golang

Exemple de démarrage de VUE3 : création d'un lecteur vidéo simple

Exemple de développement d'un robot d'exploration Web simple PHP
