美文网首页java学习
保证所有多线程都执行完,拿到最后所有线程的结果集

保证所有多线程都执行完,拿到最后所有线程的结果集

作者: 不忘初心_c5fe | 来源:发表于2020-07-02 14:25 被阅读0次

使用方法

Future

代码演示

public class AsyncQichacha {
    @Autowired
    private QichachaHttpClient qichachaHttpClient;

    @Async("qichacha")
    public Future<String> findSpecifiedDataAsync(SearchParameters parameters, QichachaEnum qichachaEnum) throws InterruptedException {
        System.out.println(Thread.currentThread().getName() +  " 线程启动");
        TimeUnit.SECONDS.sleep(3);
        System.out.println(Thread.currentThread().getName() +  " 线程结束");
        return new AsyncResult<>(qichachaHttpClient.findByQichacha(parameters, qichachaEnum));
    }
}
public class AsyncService {
    @Autowired
    private AsyncQichacha asyncQichacha;
    @Autowired
    private QichachaHttpClient qichachaHttpClient;

    public void AsyncRequest(SearchParameters parameters, Boolean details) throws InterruptedException, ExecutionException {
        List<Future<String>> list = new ArrayList();
        QichachaFullData refreshJson = new QichachaFullData();
        List<String> courtNoticeDetailList = new ArrayList<>();

        /* 企业详细信息 */
        Future<String> details1 = asyncQichacha.findSpecifiedDataAsync(parameters, QichachaEnum.QICHACHA_DETAILS);
        list.add(details1);

        /* 开庭公告列表信息 */
        Future<String> courtNotice = asyncQichacha.findSpecifiedDataAsync(parameters, QichachaEnum.COURT_NOTICE);
        list.add(courtNotice);


        List<Future> result = new ArrayList<>();
        result.addAll(list);

        while (true){
            if (list.isEmpty()){
                break;
            }
            for (int i=0; i<list.size(); i++){
                if (list.get(i).isDone()){
                    courtNoticeDetailList.add(list.get(i).get());
                    list.remove(i--);
                }
            }
            // 每隔1秒 检测一次
            TimeUnit.SECONDS.sleep(1);
        }

        System.out.println("异步方法全部调用成功");
        System.out.println("其查查获取的结果如下: ");
        System.out.println(courtNoticeDetailList.toString());
        System.out.println("refreshJson: " + refreshJson.toString());
    }
}

相关文章

  • 保证所有多线程都执行完,拿到最后所有线程的结果集

    使用方法 Future 代码演示

  • CountDownLatch的使用

    CountDownLatch是java中一个协调多线程的工具类,假如多线程在执行后,需要等待所有都执行完再执行下一...

  • iOS多线程(一)

    多线程(一) 一、多线程的作用 1、线程的定义 · 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行 ·...

  • 并发

    保证多线程的顺序执行 方式1:通过join方法保证多线程的顺序join作用:让主线程等待子线程结束后才能继续运行 ...

  • 锁与多线程同步的实现

    Java当中的锁都是为了保证多线程同步执行。如果没有锁的话,多线程是异步执行的。 什么是多线程同步? 请看下面的代...

  • 线程-11.24

    1.使用threading模块 单线程执行: 多线程执行: 主线程会等待所有的子线程结束后才结束 查看线程数量: ...

  • 知识点小结

    1 线程与进程,以及三种多线程技术简介。 (1)线程是进程的执行单元,进程的所有任务都在线程中执行!(2)线程是...

  • 多线程原理

    多线程原理 线程是什么? 线程时进程的基本执行单元,一个进程的所有任务都在线程中执行 进程要想执行任务,必须的有线...

  • iOS多线程基本介绍

    多线程 1、线程的定义 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行 进程要想执行任务,必须得有线程...

  • iOS多线程 基础

    iOS 多线程 1.线程与进程 1.1 线程的定义 线程是进程的基本执行单元,一个进程的所有任务大偶在线程中执行 ...

网友评论

    本文标题:保证所有多线程都执行完,拿到最后所有线程的结果集

    本文链接:https://www.haomeiwen.com/subject/ygqrqktx.html