Looking for java Keywords? Try Ask4Keywords

Java Language Простой пример CompletingFuture


пример

В приведенном ниже примере, calculateShippingPrice метод вычисляет стоимость доставки, которая занимает некоторое время обработки. Например, в реальном мире это может быть обращение к другому серверу, который возвращает цену, основанную на весе продукта и способе доставки.

Путем моделирования этого методом async через CompletableFuture мы можем продолжить разную работу в методе (т.е. рассчитать затраты на упаковку).

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!
    });
}