JavaでCompletableFuture.supplyAsync()メソッドを使用して非同期処理を行う

JavaでCompletableFuture.supplyAsync()メソッドを使用して非同期処理を行う

CompletableFuture.supplyAsync()メソッドは、引数として渡された処理(ラムダ式やメソッド参照など)を非同期で実行します。

複数の非同期処理をListにaddして、Stream APIを使用して並列に実行します。

Arrays.asList(page1,page2,page3).stream().map(CompletableFuture::join).toList();

Sample.java

import java.util.Arrays;
import java.util.concurrent.CompletableFuture;

public class Sample {
    public static void main(String[] args) throws InterruptedException {
        long startTime = System.currentTimeMillis();
        CompletableFuture<CompletableFuture> page1 = CompletableFuture.supplyAsync(() -> sleep("5"));
        CompletableFuture<CompletableFuture> page2 = CompletableFuture.supplyAsync(() -> sleep("3"));
        CompletableFuture<CompletableFuture> page3 = CompletableFuture.supplyAsync(() -> sleep("4"));
        Arrays.asList(page1,page2,page3).stream().map(CompletableFuture::join).toList();   
        long endTime = System.currentTimeMillis();
        System.out.println("処理時間:" + (endTime - startTime) + " ms");
    }

    public static CompletableFuture sleep(String seconds) {
        try {
            Thread.sleep(Long.valueOf(seconds) * 1000L);
        } catch (Exception e) {}
        return CompletableFuture.completedFuture(seconds + "秒かかる処理");
    }
}

実行結果です。

処理時間:5042 ms
タイトルとURLをコピーしました