Asynchrones Aufrufen einer Methode in Java
-
Verwenden Sie
Thread
zum asynchronen Aufruf einer Methode in Java -
Verwenden Sie
FutureTask
zum asynchronen Aufruf einer Methode in Java -
Verwendung von
CompletableFuture
zum asynchronen Aufruf einer Methode in Java -
Verwenden Sie
EA Async
, um eine Methode in Java asynchron aufzurufen - Verwenden Sie die Cactoos-Bibliothek, um eine Methode in Java asynchron aufzurufen
In diesem Artikel lernen wir, wie man eine Funktion in Java asynchron aufruft.
Zu Beginn sehen wir uns einige der in Java integrierten asynchronen Programmiertools an, z. B. FutureTask und CompletableFuture. Dann sehen wir uns einige Bibliotheken an, die sofort einsatzbereite Lösungen anbieten, wie EA Async und Cactoos.
Verwenden Sie Thread
zum asynchronen Aufruf einer Methode in Java
Wir können einen neuen Thread beginnen, um eine beliebige asynchrone Aktion auszuführen. Es ist einfacher zu verstehen.
Lassen Sie uns einen neuen Thread erstellen, der zwei Ganzzahlen hinzufügt und das Ergebnis ausgibt:
class example {
public static void main(String[] args) {
int num1 = 4;
int num2 = 5;
int result = num1 + num2;
Thread T = new Thread(
() -> { System.out.println("Addition of " + num1 + " and " + num2 + " is " + result); });
T.start();
}
}
Verwenden Sie FutureTask
zum asynchronen Aufruf einer Methode in Java
Die Future-Schnittstelle ermöglicht es Ihnen, asynchrone Aktionen mit der FutureTask
auszuführen. Wir können die Submit-Methode des ExecutorService
verwenden, um das Projekt asynchron auszuführen und ein FutureTask
-Objekt zurückzugeben.
So finden Sie beispielsweise die Fakultät einer Zahl:
int num1 = 9;
ExecutorService tp = Executors.newCachedThreadPool();
Future<double> futureTask = tp.submit(() -> factorial(num1));
while (!futureTask.isDone()) {
System.out.println("Still processing the task");
}
double result = futureTask.get();
tp.shutdown();
Wir haben die isDone
-Funktion der Future-Schnittstelle verwendet, um zu sehen, ob der Job abgeschlossen ist. Danach haben wir die Methode get
verwendet, um das Ergebnis zu erhalten.
Verwendung von CompletableFuture
zum asynchronen Aufruf einer Methode in Java
Als Hybrid aus Future
und CompletionStage
wurde CompletableFuture
in Java 8 eingeführt. Es verfügt über asynchrone Programmiertechniken wie supplyAsync
, runAsync
und thenApplyAsync
.
Eine CompletionStage
ist ein Versprechen. Es garantiert, dass die Berechnung irgendwann abgeschlossen wird.
Die CompletionStage
ist nützlich, da sie mehrere Methoden zum Anhängen von Callbacks bereitstellt, die ausgeführt werden, wenn die Stufe abgeschlossen ist.
Beginnen wir von vorne und führen eine einfache asynchrone Berechnung durch.
Verwenden Sie supplyAsync
mit CompletableFuture
zum asynchronen Aufruf einer Methode in Java
CompletableFuture.supplyAsync(this::sendMsg);
So einfach akzeptiert die Funktion supplyAsync
einen Lieferanten, der den asynchronen Code enthält. In diesem Beispiel möchten wir die Funktion sendMsg
verwenden.
Verwenden Sie thenAccept
mit CompletableFuture
, um eine Methode in Java asynchron aufzurufen
CompletableFuture.supplyAsync(this::sendMsg).thenAccept(this::notify);
Im ersten Beispiel haben wir sendMsg
ausgeführt, um eine Nachricht asynchron zu senden. Lassen Sie uns also einen Rückruf hinzufügen, der uns über den Zustellstatus der Nachricht informiert.
Ein Rückruf kann auf verschiedene Arten eingeleitet werden; Eine Möglichkeit ist die Verwendung von thenAccept
. In diesem Beispiel muss ein Benutzer benachrichtigt werden, um das Ergebnis der vorangehenden Berechnung zu handhaben, sobald sie durchgeführt ist.
Verwenden Sie EA Async
, um eine Methode in Java asynchron aufzurufen
Hier ist eine weitere Funktion von Java, mit der Sie schrittweise asynchronen Code schreiben können, was die Programmierung und Skalierung erheblich vereinfacht. Electronic Arts ist der Schöpfer der async-await-Funktionalität, die der Java-Umgebung über das ea-async-Paket zur Verfügung steht.
Dieses Feature transformiert den Laufzeitcode und schreibt den await-Methodenaufruf um, vergleichbar mit completeableFuture
.
Wir können also die als await-Methode bekannte EA-sync
-Methode verwenden, um den obigen completeableFuture
-Code zu implementieren, indem wir die Async.init
-Funktion aufrufen, um die Async
-Laufzeit zu initialisieren.
Hier verwenden wir die await-Funktion, die von EAs Async
-Klasse angeboten wird, um den zuvor beschriebenen CompletableFuture
-Code zu modifizieren:
static {
Async.init();
}
Um die Laufzeitanalyse Async
einzurichten, verwenden wir die Funktion Async.init
als Static.
public double example2(int num1) {
CompletableFuture<double> cf = CompletableFuture.supplyAsync(() -> factorial(num1));
double result = Async.await(cf);
}
Zur Laufzeit ändert die async
-Funktion den Code und schreibt den await
-Methodenaufruf neu, um ähnlich zu funktionieren, wobei eine Kette von CompletableFuture
verwendet wird.
Verwenden Sie die Cactoos-Bibliothek, um eine Methode in Java asynchron aufzurufen
Für asynchrone Aufgaben bietet diese Bibliothek eine Async
-Klasse an. Die Cactoos-Bibliothek verfügt über ein umfangreiches Repertoire, das von der Textmanipulation bis zu Datenstrukturen reicht.
Die primitiven Typen und Funktionen dieser Bibliothek sind mit denen vergleichbar, die von anderen Bibliotheken wie Guava und Apache Commons bereitgestellt werden, obwohl sie sich mehr auf objektorientierte Designkonzepte konzentrieren.
Hier finden wir mit einer Instanz der Klasse Async
von Cactoos die Fakultät einer Zahl.
Async<Integer, Double> a = new Async<Integer, Double>(inputdata -> factorial(inputdata));
Future<Double> asyncFuture = a.apply(num1);
Double result = asyncFuture.get();
Die apply
-Funktion verwendet die ExecutorService.submit
-Methode, um ein Future-Schnittstellenobjekt zu bearbeiten und zurückzugeben. Die Cactoos-Bibliothek bietet Klassen, die dieselben Funktionen ausführen wie die statischen Methoden in der Apache Commons-Bibliothek.
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn