美文网首页
多线程处理列表型数据任务

多线程处理列表型数据任务

作者: 倚仗听江 | 来源:发表于2024-02-03 15:37 被阅读0次

封装了个工具类,用于多线程处理列表型数据任务

/**
     * 
     *
     * @param threadWorkSize 每个线程处理的数据条数
     * @param data           数据列表
     * @param function       构建任务的方法
     * @param <T>
     * @return
     */
    public <T> List<Future<Collection<T>>> doTask(Integer threadWorkSize, List<T> data,
                                                  Function<List<T>, Callable<Collection<T>>> function) {
        log.info("开始执行多线程数据处理任务");
        //数据条数
        int dataSize = data.size();
        // 线程数
        int threadNum = dataSize / threadWorkSize + 1;
        log.info("线程数为{},数据条数为{}", threadNum, dataSize);
        // 定义标记,过滤dataSize / threadSize为整数 (当其为整数时最后一个线程无实际作用)
        boolean special = dataSize % threadWorkSize == 0;
        ExecutorService exec = Executors.newFixedThreadPool(threadNum);
        // 任务集合
        List<Callable<Collection<T>>> tasks = new ArrayList<>();
        List<T> cutList = null;
        for (int i = 0; i < threadNum; i++) {
            if (i == threadNum - 1) {
                if (special) {
                    break;
                }
                cutList = data.subList(threadWorkSize * i, dataSize);
            } else {
                cutList = data.subList(threadWorkSize * i, threadWorkSize * (i + 1));
            }
            final List<T> finalList = cutList;
            Callable<Collection<T>> task = function.apply(finalList);
            // 这里提交的任务容器列表和返回的Future列表存在顺序对应的关系
            tasks.add(task);
        }
        List<Future<Collection<T>>> futures = new ArrayList<>();
        try {
            futures = exec.invokeAll(tasks);
        } catch (InterruptedException e) {
            log.error("线程池处理失败", e);
        }
        exec.shutdown();
        return futures;
    }

相关文章

  • GWAS分析(R包GAPIT)之二(数据准备)

    2.1 准备表型数据 第一行是表头,第一列是个体号,其余每一列一个表型,Tab键分隔。 2.2 准备基因型数据 可...

  • R 多线程

    多线程就是将任务切片分配给多个核心处理。举个不恰当的例子,apply函数,就可以将矩阵、数据框按照行(列)等切片,...

  • 多线程处理数据

    多线程处理数据

  • Phenotype : 大规模表型数据处理工具

    表型数据的处理,一直是困扰许多同学的问题。面对大规模的表型数据,如果不会编程,纯用Excel的话,往往会消耗大量精...

  • 重拾Java(4)-线程

    一、概述 Java对多线程编程提供了内置支持,多线程是特殊形式的多任务处理,所有现代系统都支持多任务处理。多任务处...

  • 多线程基本概念

    多线程:多线程可以提升程序运行的效率,能够同时处理多种不同的任务,避免处理一个任务的同时搁置其他任务,造成程序卡住...

  • tassel关联分析

    一,准备文件:1.hmp 12列后接样本 2.表型形状 第一列是样本编号,第二列开始接表型形状 二,启动tasse...

  • 「TBtools plugin」OneStepWGCNA v2

    主要更新内容: 对GeneID做了防呆处理。 对表型数据和表达量数据的sample排序做了防呆处理。 增加了两个函...

  • 多线程使用场景

    多线程处理后台任务一般来说,我们需要在后台处理的任务,通常会使用定时器来开启后台线程处理,比如有些数据表的状态我需...

  • springboot2.x 如何在请求中 多线程并发处理业务[全

    由于 我的springboot2.x 使用带返回值的异步任务实现多线程并发任务[一] 讲述了多线程处理任务,但实现...

网友评论

      本文标题:多线程处理列表型数据任务

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