Maison > Java > javaDidacticiel > le corps du texte

Débloquez une programmation asynchrone plus rapide avec Java Futures

DDD
Libérer: 2024-09-20 08:19:39
original
435 Les gens l'ont consulté

Unlock Faster Async Programming with Java Futures

Dans notre article précédent, nous avons exploré le monde de ListenableFuture. Examinons maintenant plus en détail des techniques plus avancées, en nous concentrant spécifiquement sur les transformations et le chaînage. Imaginez que nous ayons un ListenableFuture obtenu à partir d'un service asynchrone. De plus, nous avons une méthode simple :

Document parse(String xml) {//...
Copier après la connexion

Au lieu de travailler avec la String elle-même, nous avons besoin du Document. Une approche consisterait à résoudre le Future et à traiter la String. Cependant, une solution plus élégante consiste à appliquer une transformation une fois que les résultats sont disponibles, ce qui fait que notre méthode se comporte comme si elle renvoyait toujours ListenableFuture. C'est remarquablement simple :

final ListenableFuture future = //...
 
final ListenableFuture documentFuture = Futures.transform(future, new Function() {
    @override    public Document apply(String contents) {
        return parse(contents);
    }
});
Copier après la connexion

Ou, pour une meilleure lisibilité :

final Function parseFun = new Function() {
    @override    public Document apply(String contents) {
        return parse(contents);
    }
};
 
final ListenableFuture future = //...
 
final ListenableFuture documentFuture = Futures.transform(future, parseFun);
Copier après la connexion

Même si la syntaxe Java peut avoir ses limites, concentrons-nous sur ce que nous avons réalisé. Futures.transform() n'attend pas que le ListenableFuture sous-jacent applique la transformation parse(). Au lieu de cela, il enregistre un rappel, prêt à être averti chaque fois que le futur donné se termine. Cette transformation s’applique pour nous de manière dynamique et transparente au bon moment. Nous avons encore un avenir, mais cette fois en enveloppant un document.

Maintenant, allons plus loin. Nous disposons également d'une méthode asynchrone, éventuellement de longue durée, qui calcule la pertinence (quoi que cela signifie dans ce contexte) d'un document donné :

ListenableFuture calculateRelevance(Document pageContents) {//...
Copier après la connexion

Pouvons-nous d’une manière ou d’une autre l’enchaîner avec le ListenableFuture que nous possédons déjà ? Première tentative :

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);
Copier après la connexion

Pour plus d'informations sur les possibilités améliorées de programmation asynchrone, visitez ce lien.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!