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
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^