- public static void main(String[] args) throws InterruptedException {
- ExecutorService executor = Executors.newFixedThreadPool(4);
- Semaphore semaphore = new Semaphore(2);
-
- try {
- CompletableFuture
futureA = CompletableFuture.supplyAsync(() -> { - try {
- semaphore.acquire(); // 获取信号量,限制并发数
- // 调用外部接口 A
- System.out.println("A进入车库");
- Thread.sleep(9000);
- System.out.println("A离开车位");
- return "A";
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- } finally {
- semaphore.release(); // 释放信号量
- }
- }, executor);
-
- CompletableFuture
futureB = CompletableFuture.supplyAsync(() -> { - try {
- semaphore.acquire(); // 获取信号量,限制并发数
- // 调用外部接口 B
- System.out.println("B进入车库");
- Thread.sleep(9000);
- System.out.println("B离开车位");
- return "B";
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- } finally {
- semaphore.release(); // 释放信号量
- }
- }, executor);
-
- CompletableFuture
futureC = CompletableFuture.supplyAsync(() -> { - try {
- semaphore.acquire(); // 获取信号量,限制并发数
- // 调用外部接口 C
- System.out.println("C进入车库");
- Thread.sleep(9000);
- System.out.println("C离开车位");
- return "C";
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- } finally {
- semaphore.release(); // 释放信号量
- }
- }, executor);
-
- CompletableFuture
futureD = CompletableFuture.supplyAsync(() -> { - try {
- semaphore.acquire(); // 获取信号量,限制并发数
- // 调用外部接口 D
- System.out.println("D进入车库");
- Thread.sleep(9000);
- System.out.println("D离开车位");
- return "D";
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- } finally {
- semaphore.release(); // 释放信号量
- }
- }, executor);
-
- CompletableFuture
combinedFuture = CompletableFuture.allOf(futureA, futureB, futureC, futureD); - combinedFuture.thenAccept(result -> {
- // 汇总数据
- String dataA = futureA.join();
- String dataB = futureB.join();
- String dataC = futureC.join();
- String dataD = futureD.join();
- String combinedData = dataA + dataB + dataC + dataD;
- System.out.println(combinedData);
- });
- } catch (Exception exception) {
- exception.printStackTrace();
- }
-
- executor.shutdown();
- }
-