欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java CompletableFuture之異步執(zhí)行、鏈式調(diào)用、組合多個Future、異常處理和超時控制等詳解

 更新時間:2025年05月29日 10:02:14   作者:學亮編程手記  
這篇文章主要介紹了Java CompletableFuture之異步執(zhí)行、鏈式調(diào)用、組合多個Future、異常處理和超時控制等用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java ComputableFuture 代碼示例

CompletableFuture 是 Java 8 引入的一個強大的異步編程工具,它實現(xiàn)了 Future 接口并提供了更豐富的功能。

以下是一些常見的 CompletableFuture 使用示例:

1. 基本用法

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

public class CompletableFutureBasicExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個CompletableFuture并異步執(zhí)行任務
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(1000); // 模擬耗時操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Hello, CompletableFuture!";
        });
        
        // 注冊完成時的回調(diào)
        future.thenAccept(result -> System.out.println("Result: " + result));
        
        // 阻塞等待結(jié)果
        try {
            String result = future.get();
            System.out.println("Main thread got: " + result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}

2. 鏈式調(diào)用

import java.util.concurrent.CompletableFuture;

public class CompletableFutureChainExample {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> {
            // 第一個異步任務
            System.out.println("Task 1 running in thread: " + Thread.currentThread().getName());
            return "Hello";
        }).thenApplyAsync(result -> {
            // 第二個異步任務,接收上一個任務的結(jié)果
            System.out.println("Task 2 running in thread: " + Thread.currentThread().getName());
            return result + " World";
        }).thenAcceptAsync(result -> {
            // 第三個異步任務,消費最終結(jié)果
            System.out.println("Task 3 running in thread: " + Thread.currentThread().getName());
            System.out.println("Final result: " + result);
        }).join(); // 等待所有任務完成
    }
}

3. 組合多個 Future

import java.util.concurrent.CompletableFuture;

public class CompletableFutureCombineExample {
    public static void main(String[] args) {
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "World");
        
        // 合并兩個Future的結(jié)果
        CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (s1, s2) -> s1 + " " + s2);
        
        combinedFuture.thenAccept(System.out::println).join();
    }
}

4. 異常處理

import java.util.concurrent.CompletableFuture;

public class CompletableFutureExceptionHandling {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> {
            if (Math.random() > 0.5) {
                throw new RuntimeException("Something went wrong!");
            }
            return "Success";
        }).exceptionally(ex -> {
            System.out.println("Exception occurred: " + ex.getMessage());
            return "Recovered from exception";
        }).thenAccept(System.out::println).join();
    }
}

5. 并行執(zhí)行多個任務

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

public class CompletableFutureAllOfExample {
    public static void main(String[] args) {
        CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> {
            sleep(1);
            return "Task 1";
        });
        
        CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> {
            sleep(2);
            return "Task 2";
        });
        
        CompletableFuture<String> task3 = CompletableFuture.supplyAsync(() -> {
            sleep(3);
            return "Task 3";
        });
        
        // 等待所有任務完成
        CompletableFuture<Void> allFutures = CompletableFuture.allOf(task1, task2, task3);
        
        // 獲取所有任務的結(jié)果
        CompletableFuture<String> combinedFuture = allFutures.thenApply(v -> {
            String result1 = task1.join();
            String result2 = task2.join();
            String result3 = task3.join();
            return result1 + ", " + result2 + ", " + result3;
        });
        
        System.out.println("Combined result: " + combinedFuture.join());
    }
    
    private static void sleep(int seconds) {
        try {
            TimeUnit.SECONDS.sleep(seconds);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

6. 超時處理(Java 9+)

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CompletableFutureTimeoutExample {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(2000); // 模擬耗時操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result";
        });
        
        // 設置超時時間為1秒
        CompletableFuture<String> timeoutFuture = future.orTimeout(1, TimeUnit.SECONDS);
        
        timeoutFuture.whenComplete((result, ex) -> {
            if (ex != null) {
                System.out.println("Exception: " + ex.getClass().getName());
                if (ex.getCause() instanceof TimeoutException) {
                    System.out.println("Task timed out");
                }
            } else {
                System.out.println("Result: " + result);
            }
        }).join();
    }
}

這些示例展示了 CompletableFuture 的主要功能,包括異步執(zhí)行、鏈式調(diào)用、組合多個 Future、異常處理和超時控制等。CompletableFuture 是 Java 并發(fā)編程中非常強大的工具,可以大大簡化異步編程的復雜性。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring動態(tài)配置計時器觸發(fā)時間的實例代碼

    Spring動態(tài)配置計時器觸發(fā)時間的實例代碼

    這篇文章主要介紹了Spring動態(tài)配置計時器觸發(fā)時間的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • java雙色球機選法程序解析

    java雙色球機選法程序解析

    這篇文章主要為大家詳細解析了java雙色球機選法程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • IDEA引入本地jar包的幾種方法

    IDEA引入本地jar包的幾種方法

    本文主要介紹了IDEA引入本地jar包的幾種方法,文中通過圖文結(jié)合的方式碼介紹的非常詳細,對大家的學習或工作有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2024-01-01
  • Java深入講解SPI的使用

    Java深入講解SPI的使用

    SPI英文全稱為Service Provider Interface,顧名思義,服務提供者接口,它是jdk提供給“服務提供廠商”或者“插件開發(fā)者”使用的接口
    2022-06-06
  • netflix.discovery.shared.transport.TransportException:Cannot execute request on any known server

    netflix.discovery.shared.transport.TransportException:Cannot

    這篇文章主要介紹了netflix.discovery.shared.transport.TransportException:Cannot execute request on any known server報錯問題及解決方法,感興趣的朋友一起看看吧
    2023-09-09
  • Spring中@Import的各種用法以及ImportAware接口詳解

    Spring中@Import的各種用法以及ImportAware接口詳解

    這篇文章主要介紹了Spring中@Import的各種用法以及ImportAware接口詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 詳解Gradle安裝并配置到IDEA的方法

    詳解Gradle安裝并配置到IDEA的方法

    這篇文章主要介紹了Gradle安裝并配置到IDEA的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 聊聊Object類中的wait()和notify()方法

    聊聊Object類中的wait()和notify()方法

    這篇文章主要介紹了Object類中的wait()和notify()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    這篇文章主要介紹了java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • SpringBoot 過濾器與攔截器實例演示

    SpringBoot 過濾器與攔截器實例演示

    本文通過示例代碼給大家講解SpringBoot 過濾器與攔截器的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11

最新評論