Heim > Java > javaLernprogramm > Hauptteil

Schalten Sie mit Java Futures eine schnellere asynchrone Programmierung frei

DDD
Freigeben: 2024-09-20 08:19:39
Original
300 Leute haben es durchsucht

Unlock Faster Async Programming with Java Futures

In unserem vorherigen Artikel haben wir die Welt von ListenableFuture erkundet. Lassen Sie uns nun tiefer in fortgeschrittenere Techniken eintauchen und uns dabei insbesondere auf Transformationen und Verkettungen konzentrieren. Stellen Sie sich vor, wir hätten eine ListenableFuture, die von einem asynchronen Dienst bezogen wurde. Zusätzlich haben wir eine einfache Methode:

Document parse(String xml) {//...
Nach dem Login kopieren

Anstatt mit dem String selbst zu arbeiten, benötigen wir das Dokument. Ein Ansatz wäre, die Zukunft aufzulösen und den String zu verarbeiten. Eine elegantere Lösung besteht jedoch darin, eine Transformation anzuwenden, sobald die Ergebnisse verfügbar sind, sodass sich unsere Methode so verhält, als würde sie immer ListenableFuture zurückgeben. Das ist bemerkenswert einfach:

final ListenableFuture future = //...
 
final ListenableFuture documentFuture = Futures.transform(future, new Function() {
    @override    public Document apply(String contents) {
        return parse(contents);
    }
});
Nach dem Login kopieren

Oder zur besseren Lesbarkeit:

final Function parseFun = new Function() {
    @override    public Document apply(String contents) {
        return parse(contents);
    }
};
 
final ListenableFuture future = //...
 
final ListenableFuture documentFuture = Futures.transform(future, parseFun);
Nach dem Login kopieren

Obwohl die Java-Syntax möglicherweise ihre Grenzen hat, konzentrieren wir uns auf das, was wir erreicht haben. Futures.transform() wartet nicht darauf, dass das zugrunde liegende ListenableFuture die parse()-Transformation anwendet. Stattdessen wird ein Rückruf registriert, der benachrichtigt werden kann, sobald die angegebene Zukunft abgeschlossen ist. Diese Transformation wird für uns im richtigen Moment dynamisch und transparent umgesetzt. Wir haben immer noch eine Zukunft, aber dieses Mal verpacken wir ein Dokument.

Jetzt gehen wir noch einen Schritt weiter. Wir haben auch eine asynchrone, möglicherweise lang laufende Methode, die die Relevanz (was auch immer das in diesem Zusammenhang bedeutet) eines bestimmten Dokuments berechnet:

ListenableFuture calculateRelevance(Document pageContents) {//...
Nach dem Login kopieren

Können wir es irgendwie mit der ListenableFuture verknüpfen, die wir bereits besitzen? Erster Versuch:

final Function> relevanceFun = new Function>() {
    @override    public ListenableFuture apply(Document input) {
        return calculateRelevance(input);
    }
};
 
final ListenableFuture future = //...
final ListenableFuture documentFuture = Futures.transform(future, parseFun);
final ListenableFuture> relevanceFuture = Futures.transform(documentFuture, relevanceFun);
Nach dem Login kopieren

Weitere Informationen zu erweiterten asynchronen Programmiermöglichkeiten finden Sie unter diesem Link.

Das obige ist der detaillierte Inhalt vonSchalten Sie mit Java Futures eine schnellere asynchrone Programmierung frei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!