【多线程】多线程异步调用线上场景:一个接口执行多个查询任务


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

/**
 * 场景:
 * 调用接口检查各个国家业务线的数据同步情况
 * 每个线程查询一个同步任务
 * 提高查询效率
 */
class Scratch {
    public static void main(String[] args) {
        CountDownLatch countDownLatch = new CountDownLatch(2);
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        List<Future> futures = new ArrayList<>();
        Future<String> futureRusultA = executorService.submit(new Callable<String>() {
            @Override
            public String call() {
                String resultA = null;
                try {
                    Thread.sleep(1000);
                    resultA = "child thread one over";
                    System.out.println(resultA);

                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } finally {
                    countDownLatch.countDown();
                    return resultA;
                }
            }
        });
        futures.add(futureRusultA);

        Future<String> futureResultB = executorService.submit(new Callable<String>() {
            @Override
            public String call() {
                String resultB = null;
                try {
                    Thread.sleep(10000);
                    resultB = "child thread two over";
                    System.out.println(resultB);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } finally {
                    countDownLatch.countDown();
                }
                return resultB;
            }
        });
        futures.add(futureResultB);
        
        boolean flag = true;
        try {
            flag = countDownLatch.await(15, TimeUnit.SECONDS);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        System.out.println("是否未超时:" + flag);
        if (!flag) {
            executorService.shutdownNow();
        } else {
            for (Future f : futures) {
                try {
                    System.out.println(f.get(2, TimeUnit.SECONDS));
                } catch (InterruptedException | ExecutionException | TimeoutException ex) {
                    ex.printStackTrace();
                }
            }
            executorService.shutdownNow();
        }
    }
}

发布了22 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/t1g2q3/article/details/103794796