Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa CompletableFuture và Future trong Java 9?

Lớp CompletableFuture<T> triển khai interface Future<T> trong Java. CompletableFuture có thể dùng như một Future hoàn thành tường minh. Interface Future không cung cấp nhiều tính năng, cần lấy kết quả tính toán bất đồng bộ bằng phương thức get() – phương thức này bị chặn (blocking), nên không thể chạy nhiều tác vụ phụ thuộc theo cách non-blocking. Ngược lại, lớp CompletableFuture cung cấp chức năng nối chuỗi nhiều tác vụ phụ thuộc chạy bất đồng bộ, cho phép tạo chuỗi tác vụ mà tác vụ tiếp theo kích hoạt khi kết quả tác vụ hiện tại sẵn sàng.

Cú pháp

public class CompletableFuture<T> extends Object implements Future<T>, CompletionStage<T>

Ví dụ

import java.util.function.Supplier;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureTest {
    public static void main(String args[]) throws ExecutionException, InterruptedException {
        Calculator calc = new Calculator(4, 7);
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(calc);
        future.thenAccept(result -> {
            System.out.println(result);
        });
        System.out.println("CompletableFutureTest End.... ");
        Thread.sleep(10000);
    }
}

// Calculator class
class Calculator implements Supplier<Integer> {
    private int x, y;
    public Calculator(int x, int y) {
        this.x = x;
        this.y = y;
    }
    @Override
    public Integer get() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return x + y;
    }
}

Kết quả

CompletableFutureTest End.... 11