使用通义灵码写了一个多线程工具类,通义灵码处于什么水平

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
NLP自然语言处理_基础版,每接口每天50万次
简介: 当方法间无依赖需提升执行效率时,可采用并行执行。示例通过`MultiThreadTaskExecutor`类实现多线程并发,其中`executeParallelDynamicMethods`方法接收一系列`Callable`任务并返回所有任务的结果列表。测试显示,四个耗时方法并行执行仅需4秒,相较于串行执行的12秒显著提升效率。该代码展示了良好的多线程编程实践。

1、场景

有多个的方法,在串行执行的时候效率比较慢,在保证方法不相互依赖的情况下想要提高效率就需要并行执行

2、通义灵码开始工作

根据场景总结相关问题并咨询同义灵码,如:帮我写一个多个方法可并行执行并返回对应数据的工具类

3、通义灵码返回

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

public class MultiThreadTaskExecutor {
   
    private final ExecutorService executor;

    public MultiThreadTaskExecutor(int threadCount) {
   
        this.executor = Executors.newFixedThreadPool(threadCount);
    }

    /**
     * 并行执行多个方法并返回它们的结果。
     *
     * @param tasks 方法列表,每个方法都封装在Callable中
     * @return 一个Future数组,包含所有方法的返回结果
     */
    public <T> List<Future<T>> executeParallel(List<? extends Callable<T>> tasks) throws InterruptedException {
   
        return executor.invokeAll(tasks);
    }

    /**
     * 关闭executor服务
     */
    public void shutdown() {
   
        executor.shutdown();
    }

    /**
     * 执行一组动态方法(表示为Callable),并收集结果。
     * @param callables 可调用对象列表,每个对象代表一个动态方法
     * @param <T> 方法返回值的泛型
     * @return 包含所有方法执行结果的列表
     */
    public  <T> List<T> executeParallelDynamicMethods(List<Callable<T>> callables) {
   
        List<CompletableFuture<T>> futures = new ArrayList<>();
        for (Callable<T> callable : callables) {
   
            CompletableFuture<T> future = CompletableFuture.supplyAsync(() ->
                    {
   
                        try {
   
                            return callable.call();
                        } catch (Exception e) {
   
                            System.out.println("supplyAsync, 运行异常:" + e.getMessage());
                        }
                        return null;
                    }
                    , executor);
            futures.add(future);
        }

        // 等待所有任务完成
        CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));

        try {
   
            allDoneFuture.get(); // 这里会阻塞直到所有任务完成
        } catch (InterruptedException | ExecutionException e) {
   
            System.out.println("executeParallelDynamicMethods, 运行异常:" + e.getMessage());
        }

        // 收集所有结果
        List<T> resultList = futures.stream().map(CompletableFuture::join).collect(Collectors.toList());
        // 关闭线程
        this.shutdown();
        return resultList;
    }

4、调用测试

import org.junit.Test;

import java.util.*;
import java.util.concurrent.Callable;

public class methodTest {
   
    public Integer timeConsumingMethod1() {
   
        long startTime= System.currentTimeMillis();
        try {
   
            Thread.sleep(3000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        long endTime= System.currentTimeMillis();
        return (int) ((endTime-startTime)/1000);
    }
    public Integer timeConsumingMethod2() {
   
        long startTime= System.currentTimeMillis();
        try {
   
            Thread.sleep(3000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        long endTime= System.currentTimeMillis();
        return (int) ((endTime-startTime)/1000);
    }
    public Integer timeConsumingMethod3() {
   
        long startTime= System.currentTimeMillis();
        try {
   
            Thread.sleep(2000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        long endTime= System.currentTimeMillis();
        return (int) ((endTime-startTime)/1000);
    }
    public  Integer timeConsumingMethod4() {
   
        long startTime= System.currentTimeMillis();
        try {
   
            Thread.sleep(4000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        long endTime= System.currentTimeMillis();
        return (int) ((endTime-startTime)/1000);
    }

    @Test
    public void parallelTest() {
   
        long startTime= System.currentTimeMillis();
        MultiThreadTaskExecutor executor = new MultiThreadTaskExecutor(4);
        List<Callable<Object>> callables = new ArrayList<>();
        callables.add(() -> timeConsumingMethod1());
        callables.add(() -> timeConsumingMethod2());
        callables.add(() -> timeConsumingMethod3());
        callables.add(() -> timeConsumingMethod4());
        List<Object> futures = executor.executeParallelDynamicMethods(callables);
        long endTime= System.currentTimeMillis();
        System.out.println("并行耗时:"+ ((endTime-startTime)/1000));
    }

    @Test
    public void serialTest() {
   
        long startTime= System.currentTimeMillis();
        timeConsumingMethod1();
        timeConsumingMethod2();
        timeConsumingMethod3();
        timeConsumingMethod4();
        long endTime= System.currentTimeMillis();
        System.out.println("串行耗时:"+ ((endTime-startTime)/1000));
    }

serialTest()运行结果

串行耗时:12


parallelTest()运行结果

并行耗时:4

5.总结

根据通义灵码提供的多线程方法测试发现,效率明显有很大提升,根据代码水平你们说一下目前的通义灵码处于什么水平呢?

相关文章
|
21天前
|
IDE iOS开发 Python
小白如何开始使用通义灵码(含安装IDE、安装灵码插件)
PyCharm 和 IntelliJ IDEA 下载安装及通义灵码插件下载安装说明
873 1
|
1月前
|
大数据 程序员 开发者
【开发者评测】通义灵码一周年:灵码编码搭子新功能有奖测评获奖名单公布!
【开发者评测】通义灵码一周年:灵码编码搭子新功能有奖测评获奖名单公布!
215 5
|
1月前
|
机器学习/深度学习 安全 开发工具
通义灵码开发者社区的构成——通义灵码团队与合作伙伴
通义灵码开发者社区的成功,得益于核心团队的引领和合作伙伴的支持。团队专注于产品开发、维护及社区管理,确保通义灵码的高质量与稳定性;合作伙伴则提供丰富的资源和资金支持,共同推动技术创新和市场应用,构建了一个充满活力的生态系统。
|
2月前
|
设计模式 小程序 前端开发
通义灵码一周年:通义灵码,一款适合零基础初学者的编码搭子
本文介绍了作者作为前端开发工程师,通过体验通义灵码的@workspace和@terminal功能,从零基础初学者的角度出发,逐步掌握编程的过程。文章详细描述了安装通义灵码的方法、如何通过提问学习项目结构和功能、以及如何使用@terminal执行和启动项目。最终,作者表示通过这些工具,他已经顺利入门编程,并将继续探索更多功能。
147 1
通义灵码一周年:通义灵码,一款适合零基础初学者的编码搭子
|
7天前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
9天前
|
人工智能 前端开发 程序员
通义灵码 AI 程序员全面上线,能和人类协作完成复杂开发任务
1 月 8 日消息,阿里云通义灵码 AI 程序员已全面上线,成为全球首个同时支持 VS Code、JetBrains IDEs 开发工具的 AI 程序员产品。此次上线的 AI 程序员相比传统 AI 辅助编程工具,能力更全面,可以让开发者以更高效、更沉浸的方式完成编码任务,通过全程对话协作的方式,就能完成从 0 到 1 的业务需求开发、问题修复、单元测试批量生成等复杂编码任务。
280 65
|
8天前
|
人工智能 前端开发 程序员
官宣!通义灵码 AI 程序员全面上线
通义灵码2.0 你的AI程序员来了!速来领取你的全新魔法搭档吧!
270 50
|
5天前
|
人工智能 自然语言处理 程序员
通义灵码2.0全新升级,AI程序员全面开放使用
通义灵码2.0来了,成为全球首个同时上线JetBrains和VSCode的AI 程序员产品!立即下载更新最新插件使用。
1238 23
|
1天前
|
人工智能 前端开发 IDE
通义灵码 2.0 全新升级发布会:你的 AI 程序员来了!
「飞天发布时刻」通义灵码 2.0 发布专场来啦。
|
1天前
|
人工智能 Java 程序员
通义灵码AI编码助手和AI程序员背后的技术
通义灵码AI编码助手和AI程序员背后的技术,由通义实验室科学家黎槟华分享。内容涵盖三部分:1. 编码助手技术,包括构建优秀AI编码助手及代码生成补全;2. 相关的AI程序员技术,探讨AI程序员的优势、发展情况、评估方法及核心难点;3. 代码智能方向的展望,分析AI在软件开发中的角色转变,从辅助编程到成为开发主力,未来将由AI执行细节任务,开发者负责决策和审核,大幅提升开发效率。
26 12