Asynchrone Ausführung ist für Entwickler kein Unbekannter. Im tatsächlichen Entwicklungsprozess wird die asynchrone Ausführung häufig im Vergleich zur synchronen Ausführung verwendet.
Zum Beispiel: 「发送短信、邮件、异步更新等」, das sind typische Szenarien, die asynchron umgesetzt werden können. 8 Möglichkeiten zur Implementierung von asynchronem
6, Nachricht queue7, asynchrones Framework von Drittanbietern, wie ThreadUtil von Hutool8, Guava asynchron
Was ist asynchron?
Schauen wir uns zunächst ein häufiges Szenario an, in dem Benutzer Bestellungen aufgeben:
Geschäftsszenario
Was ist asynchron?
Wenn wir im Synchronisierungsvorgang „SMS senden“ ausführen, müssen wir warten, bis diese Methode vollständig ausgeführt ist, bevor wir den Vorgang „Geschenkpunkte“ ausführen können, wenn die Aktion „Geschenkpunkte“ lange dauert Die Ausführung einer Textnachricht dauert lange. Warten Sie, dies ist ein typisches Synchronisierungsszenario. Tatsächlich besteht keine Abhängigkeit zwischen dem Senden von Textnachrichten und dem Verschenken von Punkten. Durch Asynchronität können wir erkennen, dass die beiden Vorgänge des Verschenkens von Punkten und des Sendens von Textnachrichten gleichzeitig ausgeführt werden können, wie zum Beispiel: Asynchron
Das nennt man asynchron. Ist das nicht sehr einfach?
public class AsyncThread extends Thread {
@Override
public void run() {
System.out.println("Current thread name:" + Thread.currentThread().getName() + " Send email success!");
}
public static void main(String[] args) {
AsyncThread asyncThread = new AsyncThread();
asyncThread.start();
}
}
Wenn ein Thread-Thread jedes Mal erstellt wird, wird er natürlich häufig erstellt und zerstört, was Systemressourcen verschwendet Verwenden Sie einen Thread-Pool:
Sie können Geschäftslogik in Runnable oder Callable kapseln und sie zur Ausführung an den Thread-Pool übergeben. 2. Zukunft asynchron Obwohl wir asynchrone Aufgaben aktiv zur Ausführung an Threads im Thread-Pool senden können, kann der Hauptthread nach Abschluss der asynchronen Aufgabenausführung nicht benachrichtigt werden, ob die Aufgabe abgeschlossen ist oder nicht. Er muss die Ergebnisse der Aufgabenausführung aktiv abrufen über die get-Methode.
Zukünftige Teile sind voneinander isoliert:
Manchmal möchten Sie nach der Ausführung einer asynchronen Aufgabe mit langer Laufzeit das von ihr zurückgegebene Ergebnis verwenden, um weitere Vorgänge auszuführen, und die Beziehung zwischen ihnen ist ebenfalls gegeben Die beiden Beziehungen erfordern, dass Programmentwickler sie manuell binden und zuweisen. Jeder Future ist voneinander isoliert, sodass CompletableFuture mehrere Futures in Reihe schalten kann, um einen Taskflow zu bilden .
Futrue verfügt nicht über einen guten Fehlerbehandlungsmechanismus:
Wenn während der Ausführung einer asynchronen Aufgabe eine Ausnahme auftritt, kann der Aufrufer diese bisher nicht passiv erkennen. Er muss die Ausnahme der get-Methode erfassen, um zu wissen, ob die Die asynchrone Aufgabe wird ausgeführt. Es ist ein Fehler aufgetreten und eine weitere Beurteilung und Verarbeitung ist erforderlich.
3. CompletableFuture implementiert asynchrone
@Slf4j
public class FutureManager {
public String execute() throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<String> future = executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println(" --- task start --- ");
Thread.sleep(3000);
System.out.println(" --- task finish ---");
return "this is future execute final result!!!";
}
});
//这里需要返回值时会阻塞主线程
String result = future.get();
log.info("Future get result: {}", result);
return result;
}
@SneakyThrows
public static void main(String[] args) {
FutureManager manager = new FutureManager();
manager.execute();
}
}
Wir müssen in einigen Geschäftsszenarien ForkJoinPool nicht explizit verwenden . 4. @Async asynchron von Spring Dies ist der Modus zur Verwendung eines benutzerdefinierten Thread-Pools. Es wird nicht empfohlen, @Async direkt zu verwenden, um asynchron zu implementieren.
5. Das Spring ApplicationEvent-Ereignis ist asynchron
Futures.addCallback(listenableFuture, new FutureCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
//成功执行...
System.out.println("Get listenable future's result with callback " + result);
}
@Override
public void onFailure(Throwable t) {
//异常情况处理...
t.printStackTrace();
}
});
那么,以上就是本期介绍的实现异步的8种方式了。
Das obige ist der detaillierte Inhalt vonMehrere Methoden der asynchronen Programmierung, wie viele kennen Sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme
Dieser Artikel ist reproduziert unter:Java后端技术全栈. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Das inländische AI Dark Horse Deepseek ist stark gestiegen und schockiert die globale KI -Industrie! Dieses chinesische Unternehmen für künstliche Intelligenz, das nur seit anderthalb Jahren gegründet wurde, hat von globalen Nutzern für seine kostenlosen und Open-Source-Modelle Deepseek-V3 und Deepseek-R1 ein breites Lob erhalten. Deepseek-R1 ist jetzt vollständig gestartet, wobei die Leistung mit der offiziellen Version von Openaio1 vergleichbar ist! Sie können seine leistungsstarken Funktionen auf der Webseite, der App und der API -Schnittstelle erleben. Download -Methode: Unterstützt iOS- und Android -Systeme können Benutzer sie über den App Store herunterladen. Deepseek Web Version Offizieller Eingang: HT
Deepseek: Wie kann man mit der beliebten KI umgehen, die von Servern überlastet ist? Als heiße KI im Jahr 2025 ist Deepseek frei und Open Source und hat eine Leistung, die mit der offiziellen Version von OpenAio1 vergleichbar ist, die seine Popularität zeigt. Eine hohe Parallelität bringt jedoch auch das Problem der Serververantwortung. Dieser Artikel wird die Gründe analysieren und Bewältigungsstrategien bereitstellen. Eingang der Deepseek -Webversion: https://www.deepseek.com/deepseek Server Beschäftigter Grund: Hoher Zugriff: Deepseeks kostenlose und leistungsstarke Funktionen ziehen eine große Anzahl von Benutzern an, die gleichzeitig verwendet werden können, was zu einer übermäßigen Last von Server führt. Cyber -Angriff: Es wird berichtet, dass Deepseek Auswirkungen auf die US -Finanzbranche hat.
Zu Beginn des Jahres 2025 gab die inländische KI "Deepseek" ein atemberaubendes Debüt! Dieses kostenlose und Open-Source-KI-Modell verfügt über eine Leistung, die mit der offiziellen Version von OpenAI von O1 vergleichbar ist, und wurde vollständig auf Webseite, App und API gestartet, wobei die multi-terminale Verwendung von iOS-, Android- und Webversionen unterstützt wird. Eingehende Suche nach Deepseek Official Website und Nutzungsleitfaden: Offizielle Website-Adresse: https://www.deepseek.com/using-Schritte für Webversion: Klicken Sie auf den obigen Link, um die offizielle Website der Deepseek einzugeben. Klicken Sie auf der Homepage auf die Schaltfläche "Konversation starten". Für die erste Verwendung müssen Sie sich mit Ihrem Mobiltelefonverifizierungscode anmelden. Nach dem Anmeldung können Sie die Dialog -Schnittstelle eingeben. Deepseek ist leistungsfähig, kann Code schreiben, Datei lesen und Code erstellen
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.