java学习

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

2020-07-02  本文已影响0人  不忘初心_c5fe

使用方法

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());
    }
}
上一篇 下一篇

猜你喜欢

热点阅读