Java Language Exemple simple de CompletableFuture


Exemple

Dans l'exemple ci - dessous, la calculateShippingPrice méthode calcule les coûts d'expédition, ce qui prend un certain temps de traitement. Dans un exemple concret, il s'agirait par exemple de contacter un autre serveur qui renvoie le prix en fonction du poids du produit et du mode de livraison.

En modélisant cela de manière asynchrone via CompletableFuture , nous pouvons continuer différents travaux dans la méthode (c.-à-d. Calculer les coûts d'emballage).

public static void main(String[] args) {
    int price = 15; // Let's keep it simple and work with whole number prices here
    int weightInGrams = 900;
    
    calculateShippingPrice(weightInGrams) // Here, we get the future
        .thenAccept(shippingPrice -> { // And then immediately work on it!
            // This fluent style is very useful for keeping it concise
            System.out.println("Your total price is: " + (price + shippingPrice));
        });
    System.out.println("Please stand by. We are calculating your total price.");
}


public static CompletableFuture<Integer> calculateShippingPrice(int weightInGrams) {
    return CompletableFuture.supplyAsync(() -> { 
        // supplyAsync is a factory method that turns a given 
        // Supplier<U> into a CompletableFuture<U>

        // Let's just say each 200 grams is a new dollar on your shipping costs
        int shippingCosts = weightInGrams / 200;
        
        try {
            Thread.sleep(2000L); // Now let's simulate some waiting time...
        } catch(InterruptedException e) { /* We can safely ignore that */ }

        return shippingCosts; // And send the costs back!
    });
}