JUC異步回調CompletableFuture用法

 

 

 

代碼如下:

//異步調用和同步調用
public class CompletableFutureDemo {
    public static void main(String[ ]args) throws Exception {

        //同步調用
        CompletableFuture<Void> completableFuture1 = CompletableFuture.runAsync(() -> {
            System.out.println(Thread.currentThread().getName() + ": CompletableFuture1");
        });
        completableFuture1.get();

        //異步調用
        CompletableFuture<Integer> completableFuture2 = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName() + ": CompletableFuture2");
            return 1024;
        });
        completableFuture2.whenComplete((t,u) -> {
            System.out.println("-----t= "+ t);
            System.out.println("-----u= "+ u);
        }).get();

    }
}

結果如下:

 

 

如果有異常,觀察t,u的值

//異步調用和同步調用
public class CompletableFutureDemo {
    public static void main(String[ ]args) throws Exception {

        //同步調用
        CompletableFuture<Void> completableFuture1 = CompletableFuture.runAsync(() -> {
            System.out.println(Thread.currentThread().getName() + ": CompletableFuture1");
        });
        completableFuture1.get();

        //異步調用
        CompletableFuture<Integer> completableFuture2 = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName() + ": CompletableFuture2");
            int i = 10/0;
            return 1024;
        });
        completableFuture2.whenComplete((t,u) -> {
            System.out.println("-----t= "+ t);
            System.out.println("-----u= "+ u);
        }).get();

    }
}

結果如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章