Einführung in die TaskExecutor-Schnittstelle und -Typen
一 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); } } }
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("--------"); } }
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>
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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

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: <!doctypehtml>

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 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.

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

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.

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

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
