[JAVA] CompletableFuture Getting Started 2 (Essayez de faire CompletableFuture)

Démarrage futur complet (futur) A continué

CompletableFuture

Comme le montre la figure, «Completable Furure» est Il implémente les interfaces «Future» et «CompletionStage». CompletionStage est une interface introduite dans Java 8.

CompletableFuture représente le traitement asynchrone et conserve le résultat lorsqu'il devient disponible.

Qu'est-ce qui est différent de Future?

CompletableFuture

Un futur qui peut être complété explicitement (en définissant sa valeur et son statut). Prend en charge les fonctions et les actions dépendantes qui se produisent à la fin et peuvent être utilisées comme étape d'achèvement. CompletableFuture@Oracle

Cette "prise en charge des fonctions et actions dépendantes qui se produisent à la fin" est une caractéristique majeure de "Completable Future"

En plus de la fonctionnalité "Future", "vous n'aurez pas à attendre un traitement fastidieux" Vous pouvez faire ce qui suit:

Lorsque le résultat du processus devient disponible Vous pouvez émettre des notifications et exécuter des rappels définis par des expressions lambda et des références de méthode.

Utilisation de base

public Future<Double> getDoubleAsync(String variable){
    //Créer un avenir complet contenant les résultats du calcul
    CompletableFuture<Double> futureValue = new CompletableFuture<>();
    new Thread( () -> { //Traiter le traitement de manière asynchrone dans un autre thread
        try {
       //Processus chronophage
            double price = doSomeLongComputation(variable);
       //Définissez la valeur résultante
            futureValue.complete(price);
        } catch (Exception ex) {
            futureValue.completeExceptionally(ex);
        }
    }).start();
    //Renvoie le futur sans attendre le calcul
    return futureValue;
}

Comment appeler la méthode ci-dessus

//Le type de retour est Future<Double>
Future<Double> futureValue = getDoubleAsync("test");
try {
    //Appelez ici. Bloqué si la valeur n'est pas disponible
    double value = futureValue.get();
    System.out.printf("value is %.2f%n", value);
} catch (ExecutionException | InterruptedException e) {
    throw new RuntimeException(e);
}

Lors de l'utilisation de SupplyAsync

La classe CompletableFuture a plusieurs méthodes de fabrique.

supplyAsync(Supplier supplier) Renvoie un nouveau CompletableFuture dans lequel la tâche exécutée dans ForkJoinPool.commonPool () appelle le fournisseur spécifié et se termine de manière asynchrone en utilisant les valeurs obtenues. supplyAsync@Oracke

public static Future<Double> getDoubleAsyncHandy(String arg) {
    return CompletableFuture.supplyAsync(() -> doSomeLongComputation(arg));
}

Vous pouvez facilement écrire CompletableFuture comme ci-dessus en utilisant la méthode supplyAsync.

Recommended Posts

CompletableFuture Getting Started 2 (Essayez de faire CompletableFuture)
CompletableFuture Getting Started 3 (Essayez d'émettre une requête asynchrone)
Essayez de faire un simple rappel
Essayez de créer un itérateur qui puisse être vu
Interface Essayez de créer un problème Java TypeScript 7-3
Comportement incrémenté Essayez de créer un problème Java TypeScript 3-4
Opération de chaîne de caractères Essayez de changer le problème Java en TypeScript 9-3
Premiers pas avec Kotlin à envoyer aux développeurs Java
Premiers pas avec Doma - Introduction à l'API Criteria
Essayez de libérer la gemme
Initialisation de for Essayez de changer le problème Java en TypeScript 5-4
Premiers pas avec DBUnit
Premiers pas avec Ruby
Essayez de faire un programme d'addition en plusieurs langues
Comment faire un pot ombré
Premiers pas avec Swift
Premiers pas avec Doma-Transactions
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
[swift5] Essayez de créer un client API avec différentes méthodes
Premiers pas avec le traitement Doma-Annotation
Premiers pas avec Java Collection
Essayez Spring Boot de 0 à 100.
Java - Comment créer JTable
Pour effectuer des requêtes lourdes de manière asynchrone
Premiers pas avec JSP et servlet
Prise en main de Completable Future (First Future)
Premiers pas avec les bases de Java
Premiers pas avec Spring Boot
[Rails] Comment faire des graines
Premiers pas avec les modules Ruby
Revenir au début, démarrer avec Java ② Instructions de contrôle, instructions de boucle
Faisons une application multiplateforme avec JRuby (génération de fichier jar)
Essayez de créer une tuile de dessin en trois dimensions CS à partir de la tuile Institut géographique