Heim  >  Artikel  >  Java  >  Java asynchron

Java asynchron

WBOY
WBOYOriginal
2024-08-30 15:09:53826Durchsuche

In der Programmiersprache Java ist Async als ein Aufruf oder eine Funktion definiert, die in einer anderen Funktion definiert oder als Argumente in einer anderen Funktion übergeben werden kann, die normalerweise deklariert wird, wenn das Programm ausgeführt werden muss, ohne das Programm zu blockieren, und das ist der Fall Dies erfolgt, wenn der Aufruf vom Ereignis zurückkehrt und zur Rückruffunktion zurückkehrt. In Java ist dies als Rückrufmethode definiert, die innerhalb des neu erstellten Threads aufgerufen wird. Im Allgemeinen handelt es sich bei der asynchronen Programmierung also um nichts anderes als das Schreiben eines nicht blockierenden Codes, bei dem es sich um das Programm handelt, das in einem separaten Thread ausgeführt wird, indem der Haupt-Thread über den Leistungsfortschritt, den Abschluss der Thread-Ausführung oder einen Fehler informiert wird.

Funktionsweise von Async in Java

In diesem Artikel besprechen wir eine Rückrufmethode, die in Java als Async-Funktion bekannt ist. Diese Funktion wird in Java auch als „await“ bezeichnet. In Java das Erstellen oder Schreiben asynchroner Programmierung durch Starten eines neuen Threads, indem dieser selbst asynchron gemacht wird. Die asynchronen Rückrufe werden nur verwendet, wenn die Aufgaben nicht voneinander abhängig sind, was einige Zeit für die Ausführung in Anspruch nehmen kann. Im Allgemeinen kann der asynchrone Aufruf anhand eines Beispiels für Online-Einkäufe erklärt werden, bei dem, wenn wir einen Artikel auswählen und in den Warenkorb legen, dieser Artikel nicht blockiert wird, da er auch für andere verfügbar ist, während andere dies nicht tun Sie müssen nicht warten, bis die Bestellung des Artikels abgeschlossen ist. Wann immer wir also ein Programm ausführen möchten, das ausgeführt werden kann, ohne seine Ausführung zu blockieren, geschieht dies mithilfe der asynchronen Programmierung.

WERBUNG Beliebter Kurs in dieser Kategorie JAVA MASTERY - Spezialisierung | 78 Kursreihe | 15 Probetests

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

In Java gibt es viele Funktionen zum Schreiben von nicht blockierendem Code, wie z. B. die Verwendung von Threads, Futures, Streams usw., da viele Anforderungen an nicht blockierenden Code bestehen, bei dem die asynchrone Programmierung erforderlich ist, um den Code asynchron auszuführen . Lassen Sie uns also einige Möglichkeiten besprechen, wie Sie eine asynchrone Programmierung erreichen können, z. B. Jcabi-Aspekte, Kakteen, Guava, CompleteableFutures, FutureTask, EA Async usw.

1. abschließbarFutures

CompleteableFutures ist die Java-Version von Javascript-Versprechen, bekannt als CompleteableFutures, die zwei Schnittstellen wie Future und CompletionStage implementieren kann, wobei eine Kombination dieser beiden Schnittstellen diese Funktion zum Schreiben oder Arbeiten mit asynchroner Programmierung vervollständigt. Diese Funktion bietet viele Methoden wie SupplyAsync, RunAsync usw. Diese Methoden werden verwendet, um den asynchronen Teil des Codes zu starten, da die SupplyAsync-Methode verwendet wird, wenn wir etwas mit dem Ergebnis tun, und wenn wir nichts wollen, können wir sie verwenden die runAsync-Methode. Es gibt andere verschiedene Methoden in CompleteableFutures, wie zum Beispiel thenCompose, wenn wir mehrere CompleteableFutures nacheinander verwenden möchten, oder einfach, wenn wir verschachtelte CompleteableFutures verwenden möchten und wenn wir die Ergebnisse von zwei CompleteableFutures kombinieren möchten, dann gibt es eine Methode namens thenCombine-Methode. Alle diese Methoden werden also in einer vervollständigbaren Zukunft behandelt, die wiederum Methoden in der Vervollständigungsphase hat, die alle diese Methoden enthalten.

Beispielbeispiel: So erstellen Sie CompleteableFuture mit einem Konstruktor ohne Argumente mit der folgenden Syntax:

CompleteableFuture <String> completeableFuture = new CompleteableFuture <String>();

Um das Ergebnis zu erhalten, müssen wir die Methode get() verwenden. Wir können es also schreiben als

String result = completeableFuture.get()  wobei diese gets()-Methode blockiert, bis die Zukunft abgeschlossen ist, aber dieser Aufruf blockiert sie für immer, da die Zukunft nie abgeschlossen wird. Wir müssen es also manuell vervollständigen, indem wir die folgende Methode aufrufen.

completeableFuture.complete("Result")

Daher erhalten die Clients bestimmte Ergebnisse und ignorieren die nachfolgenden Aufrufe. Das Programm könnte wie folgt aussehen.

CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
while (!completableFuture.isDone()) {
System.out.println("CompletableFuture is not finished yet...");
}
long result = completableFuture.get();

2. EA Async

Dies ist eine weitere Funktion in Java zum sequentiellen Schreiben von asynchronem Code, die natürlich eine einfache Programmierung und Skalierung ermöglicht. Dies ist Electronic Arts, das über die Async-Wait-Funktion verfügt, die dem Java-Ökosystem über diese EA-Async-Bibliothek zur Verfügung gestellt wird. Diese Funktion konvertiert den Laufzeitcode und schreibt den Aufruf der Await-Methode neu, die ähnlich wie completableFuture funktioniert. Daher können wir den obigen CompleteableFuture-Code implementieren, indem wir die EA-Sync-Methode, die als Wait-Methode bekannt ist, verwenden, indem wir die Async.init-Methode aufrufen, um die Async-Laufzeit zu initialisieren.

Betrachten wir also ein Beispiel einer Fakultät einer Zahl unter Verwendung von CompleteableFuture und EA Sync.

CompletableFuture <Double> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
while (!completableFuture.isDone()) {
System.out.println("The completeableFuture is not completed...");
}
double res = completableFuture.get();

Der obige Code kann also in der EA-Synchronisierungsfunktion verwendet werden, indem die Wait-Methode für den obigen Code verwendet wird; Anstelle der Methode „get()“ verwenden wir die Methode „await()“, sodass der obige Code nur mit der letzten Zeile aktualisiert werden kann und wir mit der init-Methode von Async im statischen Block initialisieren müssen, der Rest des Codes bleibt gleich.

static { Async.init(); }
public func_name(){….. same as above code of completeableFuture…
double res Async.await(completableFuture);

From the above sample code, which is transformed code of completeableFuture code by using static block also for initializing the Async runtime so that the Async can transform the code of completeableFuture code during runtime and then to the await method, it can rewrite the calls which will now EA async will behave similarly to that of using the chain of completeableFuture or Future.join method. So now, when once the asynchronous execution of any method is completed, then the result from the Future method is passed to another method where the method is having the last execution using the CompleteableFuture.runAsync method.

In Java, as discussed above, there are many different ways for writing the asynchronous programming using various other methods.

Conclusion

In this article, we discussed java async where it is defined as a callback method that will continue the execution of the program without blocking by returning the calls to the callback function. This article saw how asynchronous programming is written in java using different features such as CompleteableFutures, EA async, Future Task, Guava, etc. In this article, we have seen two among these features for making the callback functions asynchronous by using various methods provided by the given respective features.

Das obige ist der detaillierte Inhalt vonJava asynchron. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:Java-ListeniteratorNächster Artikel:Java-Listeniterator