Asynchrones Aufrufen einer Methode in Java

Muhammad Zeeshan 12 Oktober 2023
  1. Verwenden Sie Thread zum asynchronen Aufruf einer Methode in Java
  2. Verwenden Sie FutureTask zum asynchronen Aufruf einer Methode in Java
  3. Verwendung von CompletableFuture zum asynchronen Aufruf einer Methode in Java
  4. Verwenden Sie EA Async, um eine Methode in Java asynchron aufzurufen
  5. Verwenden Sie die Cactoos-Bibliothek, um eine Methode in Java asynchron aufzurufen
Asynchrones Aufrufen einer Methode in Java

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.

Muhammad Zeeshan avatar Muhammad Zeeshan avatar

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

Verwandter Artikel - Java Method