Heim >Java >javaLernprogramm >So verwenden Sie CompletableFuture für asynchrone Programmierung und Parallelitätskontrolle in Java 9

So verwenden Sie CompletableFuture für asynchrone Programmierung und Parallelitätskontrolle in Java 9

WBOY
WBOYOriginal
2023-07-30 11:58:53818Durchsuche

So implementieren Sie mit CompletableFuture asynchrone Programmierung und Parallelitätskontrolle in Java 9

Einführung:
Mit der steigenden Nachfrage nach hoher Leistung und hoher Parallelität in modernen Anwendungen sind asynchrone Programmierung und Parallelitätskontrolle zu häufigen Problemen in der Entwicklung geworden. Die in Java 9 eingeführte CompletableFuture-Klasse bietet einen leistungsstarken Mechanismus zur Verarbeitung asynchroner Vorgänge und eine einfache und elegante Möglichkeit, die Parallelitätskontrolle zu implementieren. In diesem Artikel werden die Grundkonzepte von CompletableFuture in Java 9 vorgestellt und einige Beispielcodes bereitgestellt, um zu demonstrieren, wie CompletableFuture zur Implementierung asynchroner Programmierung und Parallelitätskontrolle verwendet wird.

1. Einführung in CompletableFuture

CompletableFuture ist eine Ergänzung zum in Java 8 eingeführten asynchronen Programmiermechanismus. Es handelt sich um eine Klasse, die die Schnittstellen Future und CompletionStage implementiert. Die Future-Schnittstelle wird verwendet, um das Ergebnis einer asynchronen Aufgabe darzustellen, die möglicherweise nicht abgeschlossen wird, während die CompletionStage-Schnittstelle verwendet wird, um eine Berechnung auszudrücken, die möglicherweise asynchron ausgeführt wird (einschließlich Auslösen von Vorgängen und Zurückgeben von Ergebnissen), sowie nachfolgender Vorgänge, die möglicherweise ausgeführt werden ausgelöst werden, nachdem die Berechnung abgeschlossen ist. Die CompletableFuture-Klasse bietet eine vereinfachte Möglichkeit zur Verwendung dieser Schnittstellen und bietet leistungsfähigere Funktionen für die Verarbeitung asynchroner Vorgänge.

2. Grundlegendes Anwendungsbeispiel

  1. Erstellen eines CompletableFuture-Objekts

Zuerst müssen wir ein CompletableFuture-Objekt erstellen, um das Ergebnis der asynchronen Berechnung darzustellen. Die CompletableFuture-Klasse stellt eine Vielzahl statischer Methoden zum Erstellen solcher Objekte bereit, z. B. „completedFuture“, „supplyAsync“ usw. Hier ist ein Beispielcode:

CompletableFuture<String> future = CompletableFuture.completedFuture("Hello, CompletableFuture!");

Im obigen Code verwenden wir die Methode „completedFuture“, um ein fertiges CompletableFuture-Objekt zu erstellen und ihm als Berechnungsergebnis einen String zu übergeben.

  1. Asynchrone Berechnung auslösen

Als nächstes müssen wir eine asynchrone Berechnung auslösen und sie mit dem im vorherigen Schritt erstellten CompletableFuture-Objekt verknüpfen. Die CompletableFuture-Klasse stellt hierfür zwei Methoden bereit, nämlich runAsync und SupplyAsync. Ersteres wird verwendet, um eine asynchrone Operation auszuführen, die kein Ergebnis zurückgibt, während letzteres verwendet wird, um eine asynchrone Operation auszuführen, die ein Ergebnis zurückgibt. Hier ist ein Beispielcode:

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 异步计算,返回一个整数结果
    return 42;
});

Im obigen Code verwenden wir die Methode „supplyAsync“, um eine asynchron ausgeführte Berechnung zu erstellen, die ein ganzzahliges Ergebnis zurückgibt.

  1. Asynchrone Berechnungsergebnisse verarbeiten

Sobald die asynchrone Berechnung abgeschlossen ist, können wir die berechneten Ergebnisse verarbeiten, indem wir die Methoden des CompletableFuture-Objekts aufrufen. Die CompletableFuture-Klasse bietet eine Vielzahl von Methoden zum Verarbeiten von Ergebnissen, z. B. thenApply, thenAccept usw. Hier ist ein Beispielcode:

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 异步计算,返回一个整数结果
    return 42;
});
future.thenApply(result -> {
    // 处理结果并返回一个新的结果
    return result * 2;
})
.thenAccept(result -> {
    // 处理最终结果
    System.out.println("Final result: " + result);
});

Im obigen Code rufen wir die Methode thenApply auf, um das Ergebnis nach Abschluss der asynchronen Berechnung zu verarbeiten und ein neues Ergebnis zurückzugeben. Dann haben wir die Methode thenAccept aufgerufen, um das Endergebnis zu verarbeiten und auszudrucken.

3. Beispiel für die Parallelitätskontrolle

Zusätzlich zur asynchronen Programmierung bietet CompletableFuture auch einige Methoden zur Implementierung der Parallelitätskontrolle. Zu den am häufigsten verwendeten Methoden gehören: anyOf, allOf und join.

  1. anyOf-Methode

anyOf-Methode wird verwendet, um auf den Abschluss eines von mehreren CompletableFutures zu warten. Es wird ein neues CompletableFuture-Objekt zurückgegeben, dessen Auswertung das Ergebnis des ersten abgeschlossenen CompletableFuture-Objekts ergibt. Hier ist ein Beispielcode:

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
    // 异步计算1
    return 1;
});
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
    // 异步计算2
    return 2;
});
CompletableFuture<Object> resultFuture = CompletableFuture.anyOf(future1, future2);
resultFuture.thenAccept(result -> {
    System.out.println("First result: " + result);
});

Im obigen Code verwenden wir die Methode „anyOf“, um auf die Berechnung von „Future1“ oder „Future2“ zu warten und das Ergebnis auszudrucken.

  1. allOf-Methode

allOf-Methode wird verwendet, um zu warten, bis alle Berechnungen in mehreren CompletableFutures abgeschlossen sind. Es wird ein neues CompletableFuture-Objekt zurückgegeben, das einen Void-Wert (Null) ergibt. Hier ist ein Beispielcode:

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
    // 异步计算1
    return 1;
});
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
    // 异步计算2
    return 2;
});
CompletableFuture<Void> resultFuture = CompletableFuture.allOf(future1, future2);
resultFuture.thenRun(() -> {
    System.out.println("All calculations are completed.");
});

Im obigen Code verwenden wir die Methode allOf, um auf den Abschluss aller Berechnungen in Zukunft1 und Zukunft2 zu warten und eine Abschlussmeldung auszudrucken.

  1. Join-Methode

Join-Methode wird verwendet, um auf das Berechnungsergebnis eines CompletableFuture zu warten und das Ergebnis zurückzugeben. Wenn während der Berechnung eine Ausnahme auftritt, wird eine Ausnahme ausgelöst. Hier ist ein Beispielcode:

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 异步计算,返回一个整数结果
    return 42;
});
int result = future.join();
System.out.println("Result: " + result);

Im obigen Code verwenden wir die Join-Methode, um auf den Abschluss der Berechnung der Zukunft zu warten und das Ergebnis zu erhalten.

Zusammenfassung:

Dieser Artikel stellt die Grundkonzepte von CompletableFuture in Java 9 vor und enthält einige Beispielcodes, um zu demonstrieren, wie CompletableFuture zur Implementierung asynchroner Programmierung und Parallelitätskontrolle verwendet wird. Durch die Verwendung von CompletableFuture können wir asynchrone Vorgänge auf einfache und elegante Weise verarbeiten und eine flexible Steuerung gleichzeitiger Berechnungen erreichen. Ich hoffe, diese Beispiele helfen Ihnen, CompletableFuture zu verstehen und zu verwenden.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie CompletableFuture für asynchrone Programmierung und Parallelitätskontrolle in Java 9. 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