應用場景是產品中需要有一個批量執行的任務,很多店鋪同時執行,並且需要執行之后的結果進行業務處理,然后在全部執行完畢之后通知處理完畢
用Future和Callable雖然可以阻塞獲取結果,但是因為處理起來有些繁瑣,比較消耗資源,而CompletableFuture可以滿足這個需求,讓異步編程變的更加輕松。
直接上demo
import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class TestMain { public static void main(String[] args) { //批量異步 ExecutorService executor = Executors.newFixedThreadPool(1000); for (int i = 0; i < 10; i++) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { String uuid = UUID.randomUUID().toString(); System.out.println("線程" + uuid + "開始了"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return uuid; }, executor); future.thenAccept(uuid -> System.out.println("線程" + uuid + "結束了")); } //關閉線程池 executor.shutdown(); try { if (executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) { System.out.println("所有任務已經執行完畢"); } } catch (InterruptedException e) { e.printStackTrace(); } } }
如果大家有什么不解,或意見,歡迎在下方留言,樓主看到就會回復的,謝謝。