Heim Java javaLernprogramm Einführung in die TaskExecutor-Schnittstelle und -Typen

Einführung in die TaskExecutor-Schnittstelle und -Typen

Jun 25, 2017 am 09:39 AM
实例

TaskExecutor-Schnittstelle

Die TaskExecutor-Schnittstelle von Spring entspricht der Java.util.concurrent.Executor-Schnittstelle. Tatsächlich besteht der Hauptgrund für seine Existenz darin, die Abhängigkeit von Java 5 bei der Verwendung von Thread-Pools zu abstrahieren. Diese Schnittstelle verfügt nur über eine Methode ausführen (ausführbare Aufgabe), die eine Ausführungsaufgabe entsprechend der Semantik und Konfiguration des Thread-Pools akzeptiert.
TaskExecutor wurde ursprünglich erstellt, um bei Bedarf eine Thread-Pool-Abstraktion für andere Spring-Komponenten bereitzustellen. Beispielsweise verwenden die ApplicationEventMulticaster-Komponente, der AbstractMessageListenerContainer von JMS und die Integration von Quartz alle die TaskExecutor-Abstraktion, um einen Thread-Pool bereitzustellen. Natürlich können Sie diese Abstraktionsschicht auch verwenden, wenn Ihre Beans Thread-Pool-Verhalten erfordern.

2 TaskExecutor-Typ

Im Spring-Distributionspaket sind einige TaskExecutor-Implementierungen vordefiniert. Mit ihnen müssen Sie es nicht einmal mehr selbst umsetzen.

  • SimpleAsyncTaskExecutor-Klasse

Diese Implementierung verwendet keine Threads wieder oder startet bei jedem Aufruf einen neuen Thread. Es wird jedoch weiterhin das Festlegen eines Grenzwerts für die Gesamtzahl gleichzeitiger Threads unterstützt. Wenn der Grenzwert für die Gesamtzahl gleichzeitiger Threads überschritten wird, werden neue Aufrufe blockiert, bis eine Position freigegeben wird. Wenn Sie einen echten Pool benötigen, lesen Sie weiter.

  • SyncTaskExecutor-Klasse

Diese Implementierung wird nicht asynchron ausgeführt. Stattdessen wird jeder Aufruf in dem Thread ausgeführt, der den Aufruf ausgelöst hat. Der Haupteinsatzbereich besteht darin, dass kein Multithreading erforderlich ist, beispielsweise bei einfachen Testfällen.

  • ConcurrentTaskExecutor-Klasse

Diese Implementierung ist ein Wrapper für die Java 5-Klasse java.util.concurrent.Executor. Es gibt eine weitere Alternative, die ThreadPoolTaskExecutor-Klasse, die die Konfigurationsparameter des Executors als Bean-Eigenschaften verfügbar macht. Es ist selten notwendig, ConcurrentTaskExecutor zu verwenden, aber wenn ThreadPoolTaskExecutor nicht ausreicht, ist ConcurrentTaskExecutor eine weitere Alternative.

  • SimpleThreadPoolTaskExecutor-Klasse

Diese Implementierung ist eigentlich eine Unterklasse der SimpleThreadPool-Klasse von Quartz, die auf die Lebenszyklusrückrufe von Spring lauscht. Dies ist die typische Verwendung, wenn Sie über einen Thread-Pool verfügen, der von Quartz- und Nicht-Quartz-Komponenten gemeinsam genutzt werden muss.

  • ThreadPoolTaskExecutor-Klasse

Es wird kein Ersatz oder Downport des java.util.concurrent-Pakets unterstützt. Sowohl die Implementierungen von java.util.concurrent durch Doug Lea als auch Dawid Kurzyniec verwenden unterschiedliche Paketstrukturen, was dazu führt, dass sie nicht korrekt ausgeführt werden.

Diese Implementierung kann nur in der Java 5-Umgebung verwendet werden, wird in dieser Umgebung jedoch am häufigsten verwendet. Die bereitgestellten Bean-Eigenschaften können verwendet werden, um einen java.util.concurrent.ThreadPoolExecutor zu konfigurieren und ihn in einen TaskExecutor einzubinden. Wenn Sie eine erweiterte Klasse wie ScheduledThreadPoolExecutor benötigen, empfehlen wir stattdessen die Verwendung von ConcurrentTaskExecutor.

  • TimerTaskExecutor-Klasse

Diese Implementierung verwendet eine TimerTask als Implementierung dahinter. Der Unterschied zu SyncTaskExecutor besteht darin, dass der Methodenaufruf in einem separaten Thread erfolgt, obwohl er in diesem Thread synchronisiert wird.

  • WorkManagerTaskExecutor-Klasse

CommonJ ist eine Reihe von Spezifikationen, die gemeinsam von BEA und IBM entwickelt wurden. Bei diesen Spezifikationen handelt es sich nicht um Java-EE-Standards, sondern um gemeinsame Standards für BEA- und IBM-Anwendungsserverimplementierungen

Diese Implementierung verwendet CommonJ WorkManager als zugrunde liegende Implementierung und ist die wichtigste für die Konfiguration von CommonJ WorkManager-Anwendungen in der Spring-Kontextklasse . Ähnlich wie SimpleThreadPoolTaskExecutor implementiert diese Klasse die WorkManager-Schnittstelle, sodass sie direkt als WorkManager verwendet werden kann.

Drei einfache Beispiele für 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);      
            }  
        } 
}
Nach dem Login kopieren
Code anzeigen

2 main

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("--------"); 
    } 
}
Nach dem Login kopieren
Code anzeigen

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>
Nach dem Login kopieren
View Code

 

Das obige ist der detaillierte Inhalt vonEinführung in die TaskExecutor-Schnittstelle und -Typen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SVM-Beispiele in Python SVM-Beispiele in Python Jun 11, 2023 pm 08:42 PM

Support Vector Machine (SVM) in Python ist ein leistungsstarker überwachter Lernalgorithmus, der zur Lösung von Klassifizierungs- und Regressionsproblemen verwendet werden kann. SVM eignet sich gut für den Umgang mit hochdimensionalen Daten und nichtlinearen Problemen und wird häufig in den Bereichen Data Mining, Bildklassifizierung, Textklassifizierung, Bioinformatik und anderen Bereichen eingesetzt. In diesem Artikel stellen wir ein Beispiel für die Verwendung von SVM zur Klassifizierung in Python vor. Wir werden das SVM-Modell aus der scikit-learn-Bibliothek verwenden

VUE3-Erste-Schritte-Beispiel: Erstellen eines einfachen Videoplayers VUE3-Erste-Schritte-Beispiel: Erstellen eines einfachen Videoplayers Jun 15, 2023 pm 09:42 PM

Da die neue Generation von Front-End-Frameworks weiter auf dem Vormarsch ist, erfreut sich VUE3 als schnelles, flexibles und benutzerfreundliches Front-End-Framework großer Beliebtheit. Als Nächstes lernen wir die Grundlagen von VUE3 kennen und erstellen einen einfachen Videoplayer. 1. VUE3 installieren Zuerst müssen wir VUE3 lokal installieren. Öffnen Sie das Befehlszeilentool und führen Sie den folgenden Befehl aus: npminstallvue@next Erstellen Sie dann eine neue HTML-Datei und führen Sie VUE3 ein: &lt;!doctypehtml&gt;

Erfahren Sie Best-Practice-Beispiele für die Zeigerkonvertierung in Golang Erfahren Sie Best-Practice-Beispiele für die Zeigerkonvertierung in Golang Feb 24, 2024 pm 03:51 PM

Golang ist eine leistungsstarke und effiziente Programmiersprache, mit der sich verschiedene Anwendungen und Dienste entwickeln lassen. In Golang sind Zeiger ein sehr wichtiges Konzept, das uns helfen kann, Daten flexibler und effizienter zu verwalten. Die Zeigerkonvertierung bezieht sich auf den Prozess der Zeigeroperation zwischen verschiedenen Typen. In diesem Artikel werden anhand konkreter Beispiele die Best Practices der Zeigerkonvertierung in Golang erläutert. 1. Grundkonzepte In Golang hat jede Variable eine Adresse, und die Adresse ist der Speicherort der Variablen im Speicher.

Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Mar 08, 2024 am 09:27 AM

Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Oracle-Datenbank ist eines der bekanntesten relationalen Datenbankverwaltungssysteme in der Branche und wird häufig für die Datenspeicherung und -verwaltung auf Unternehmensebene verwendet. In Oracle-Datenbanken ist die Instanz ein sehr wichtiges Konzept. Instanz bezieht sich auf die laufende Umgebung der Oracle-Datenbank im Speicher. Jede Instanz verfügt über eine unabhängige Speicherstruktur und einen Hintergrundprozess, der zur Verarbeitung von Benutzeranforderungen und zur Verwaltung von Datenbankvorgängen verwendet wird. Die Anzahl der Instanzen hat einen wichtigen Einfluss auf die Leistung und Stabilität der Oracle-Datenbank.

Beispiel für einen VAE-Algorithmus in Python Beispiel für einen VAE-Algorithmus in Python Jun 11, 2023 pm 07:58 PM

VAE ist ein generatives Modell. Der vollständige Name lautet VariationalAutoencoder, was ins Chinesische als Variational Autoencoder übersetzt wird. Es handelt sich um einen unbeaufsichtigten Lernalgorithmus, der zur Generierung neuer Daten wie Bilder, Audio, Text usw. verwendet werden kann. Im Vergleich zu herkömmlichen Autoencodern sind VAEs flexibler und leistungsfähiger und können komplexere und realistischere Daten generieren. Python ist eine der am weitesten verbreiteten Programmiersprachen und eines der wichtigsten Werkzeuge für Deep Learning. In Python gibt es viele hervorragende und tiefe maschinelle Lernmethoden

Beispiel für die Entwicklung eines einfachen PHP-Webcrawlers Beispiel für die Entwicklung eines einfachen PHP-Webcrawlers Jun 13, 2023 pm 06:54 PM

Mit der rasanten Entwicklung des Internets sind Daten zu einer der wichtigsten Ressourcen im heutigen Informationszeitalter geworden. Als Technologie zur automatischen Erfassung und Verarbeitung von Netzwerkdaten erregen Webcrawler immer mehr Aufmerksamkeit und Anwendung. In diesem Artikel wird erläutert, wie Sie mit PHP einen einfachen Webcrawler entwickeln und die Funktion zum automatischen Abrufen von Netzwerkdaten realisieren. 1. Überblick über Web Crawler Web Crawler ist eine Technologie, die automatisch Netzwerkressourcen abruft und verarbeitet. Ihr Hauptarbeitsprozess besteht darin, das Browserverhalten zu simulieren, automatisch auf bestimmte URL-Adressen zuzugreifen und alle Informationen zu extrahieren.

Beispiele für die Verwendung von Verifizierungscodes im Gin-Framework Beispiele für die Verwendung von Verifizierungscodes im Gin-Framework Jun 23, 2023 am 08:10 AM

Mit der Popularität des Internets sind Verifizierungscodes zu einem notwendigen Prozess für die Anmeldung, Registrierung, das Abrufen von Passwörtern und andere Vorgänge geworden. Im Gin-Framework ist die Implementierung der Verifizierungscode-Funktion extrem einfach geworden. In diesem Artikel wird erläutert, wie eine Bibliothek eines Drittanbieters zum Implementieren der Verifizierungscodefunktion im Gin-Framework verwendet wird, und es wird Beispielcode als Referenz für die Leser bereitgestellt. 1. Abhängige Bibliotheken installieren Bevor wir den Bestätigungscode verwenden können, müssen wir die Bibliothek goCaptcha eines Drittanbieters installieren. Um goCaptcha zu installieren, können Sie den goget-Befehl verwenden: $goget-ugithub

Beispiel für einen GAN-Algorithmus in Python Beispiel für einen GAN-Algorithmus in Python Jun 10, 2023 am 09:53 AM

Generative Adversarial Networks (GAN) ist ein Deep-Learning-Algorithmus, der zwei neuronale Netze nutzt, um miteinander zu konkurrieren und neue Daten zu generieren. GAN wird häufig für Generierungsaufgaben in den Bereichen Bild, Audio, Text und anderen Bereichen verwendet. In diesem Artikel werden wir Python verwenden, um ein Beispiel für einen GAN-Algorithmus zum Generieren von Bildern handgeschriebener Ziffern zu schreiben. Vorbereitung des Datensatzes Wir werden den MNIST-Datensatz als unseren Trainingsdatensatz verwenden. Der MNIST-Datensatz enthält

See all articles