Future使用示例

开启的线程,处理数据有返回值,需要接收每个线程的返回数据;

1、使用场景介绍

  1. 调用分页查询接口,每次最多返回100条数据,并返回该次查询的总数据条数;
  2. 请求数据量为1000条,单线程情况下需要循环调用10次接口,然后将10次获取到的数据依次存入一个List中;

2、使用需求

  1. 请求一次接口,获取总数据条数,判定需要请求的次数;
  2. 循环开启线程,每个线程只获取指定范围内的数据;
  3. 等待每个线程的返回结果,将每个线程的结果添加到一个List中;
  4. 每次开启的线程,都需要接收其返回数据

3、代码

阿里的 Java开发手册,上面有线程池的一个建议:线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险;

// 开启线程-方法1
private ExecutorService executorService = new ThreadPoolExecutor(2, 3, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
// 开启线程-方法2
// ExecutorService executorService = Executors.newCachedThreadPool();
// 开启线程-方法3
// ExecutorService executorService = Executors.newSingleThreadExecutor();
// count:需要循环的次数
// 查询数据方法:List<Object> dateCellList = queryDate(Object params);
List<Object> dataAllList = new LinkedList();
List<Future> futureList = Collections.synchronizedList(new LinkedList<>());
int count = 10;
for (int i = 1; i <= count; i++) {
            final Future<List<Object>> futureCell = executorService.submit(() -> {
                List<Object> dateCellList = queryDate(Object params);
                return dateCellList;
            });
            futureList.add(futureCell);
        }
        for (Future future : futureList) {
            try {
                List<Object> dateCellList = (List<Object>) future.get(30, TimeUnit.SECONDS);
                dataAllList.add(dateCellList);
                dateCellList.clear();
            } catch (InterruptedException | ExecutionException | TimeoutException e) {
                e.printStackTrace();
            }
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,545评论 1 32
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,523评论 0 4
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,119评论 6 13
  • 一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Andr...
    lucas777阅读 5,354评论 2 54
  • 通过学习活法中的三小节,讲到因果报应,要强于命运的法则,我们要多做好事,多行善,少做坏事,人要行得端正,古人...
    王成玉_ea80阅读 380评论 0 0

友情链接更多精彩内容