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

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,视频资源包5000点
简介: 当方法间无依赖需提升执行效率时,可采用并行执行。示例通过`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.总结

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

相关文章
|
1天前
|
设计模式 人工智能 前端开发
通义灵码2.0 AI 程序员体验官招募活动---通义灵码评测
在大模型不断更新迭代的当下,众多大厂纷纷推出自家的 AI 编码助手。其中,阿里云的通义灵码堪称市场上最为成熟的产品之一,紧随其后的则是腾讯的 AI 助手。在近期实际项目开发过程中,我使用了通义灵码助手,其最新版本展现出了令人惊叹的强大性能。在一些模块编码任务上,通义灵码表现尤为出色,生成的代码在命名规范性、易扩展性以及易读性方面,甚至超越了大多数普通程序员。通义灵码在生成代码时,不仅会考量设计模式,遵循重构原则,还具备强大的 bug 检测与修复能力,在单元测试方面同样表现优异。接下来,本文将通过一个小游戏的实例,对通义灵码的各项功能展开测试。
18 0
通义灵码2.0 AI 程序员体验官招募活动---通义灵码评测
|
7天前
|
人工智能 运维 自然语言处理
通义灵码 AI实战《手把手教你用通义灵码写一个音乐电子小闹钟》
通义灵码DeepSeek版本相比qwen2.5,增强了深度思考和上下文理解能力,显著提升了开发效率,尤其适合代码能力较弱的运维人员,真正实现了“代码即服务”。
101 1
|
4天前
|
人工智能 IDE Java
寻找通义灵码 AI 程序员 {头号玩家} ,体验 QwQ-Plus、DeepSeek 满血版的通义灵码
通义灵码联合 CHERRY 中国全网发起寻找 AI 程序员 {头号玩家},体验全新模型加持下的 AI 程序员的智能编码新功能,体验图生代码 Agent、单元测试 Agent 、跨语言编程等 AI 程序员能力,赢取通义灵码 X CHERRY 联名定制个人签名款机械键盘 、CHERRY MX8.3 旗舰级机械键盘、CHERRY 无线双模鼠标、码力全开蛇皮袋等奖品!
|
11天前
|
人工智能 IDE Java
沉浸式演示:在新老项目中如何快速上手通义灵码 AI 程序员
沉浸式演示:在新老项目中如何快速上手通义灵码 AI 程序员
|
12天前
|
人工智能 自然语言处理 程序员
开测: AI智能编码辅助工具通义灵码V2.0 来了
通义灵码2.0是阿里云推出的AI编程助手,基于DeepSeek大模型进行快速迭代,显著提升了代码生成、多任务协作和模型性能。
162 12
开测: AI智能编码辅助工具通义灵码V2.0 来了
|
4天前
|
人工智能 自然语言处理 程序员
用通义灵码开发一个Python时钟:手把手体验AI程序员加持下的智能编码
通义灵码是基于通义大模型的AI研发辅助工具,提供代码智能生成、研发问答、多文件修改等功能,帮助开发者提高编码效率。本文通过手把手教程,使用通义灵码开发一个简单的Python时钟程序,展示其高效、智能的编码体验。从环境准备到代码优化,通义灵码显著降低了开发门槛,提升了开发效率,适合新手和资深开发者。最终,你将体验到AI加持下的便捷与强大功能。
|
10天前
|
人工智能 Java 程序员
通义灵码 2.0 | AI程序员 荣耀登场
通义灵码2.0引入了AI程序员,具备多文件代码修改和使用工具的能力,可帮助开发者完成需求实现、问题解决、单元测试用例生成等任务。相比1.0版本,2.0在代码生成速度、准确度及自然语言理解方面有显著提升,支持更多上下文类型如#file、#codeChanges等,便于灵活提问与代码审查。本文通过实际操作展示了AI程序员在功能开发、跨语言编程等方面的应用,体验良好;但在单元测试环节遇到环境检查问题未能解决,希望后续能提供更详细的修复文档。总体而言,AI程序员大幅提升了开发效率,尤其在新功能迭代和错误排查方面表现出色,但生成的代码风格有时需人工调整以适应现有项目结构。
|
7天前
|
人工智能 Java 测试技术
通义灵码2.0·AI程序员加持下的智能编码实践与测评
通义灵码2.0是阿里云推出的新一代智能编程助手,集成DeepSeek模型并新增多项功能,显著提升开发效率。本文通过实际项目体验新功能开发、跨语言编程、单元测试自动生成和图生代码等功能,展示其在代码生成、质量内建和人机协作方面的优势。相比1.0版本,2.0在模型选择、代码质量和用户体验上均有显著提升。尽管存在依赖网络和多语言混合项目中的不足,但整体表现优异,极大优化了开发流程。[了解更多](https://lingma.aliyun.com/)
131 1
|
10天前
|
人工智能 自然语言处理 程序员
产品测评 | AI编程界的集大成者——通义灵码AI程序员
通义灵码AI程序员是阿里云推出的一款基于先进自然语言处理和深度学习技术的编程助手,集成于VS Code和JetBrains IDEs中。它覆盖从前端到后端的开发流程,支持多文件级别的代码修改、单元测试生成、多版本快照管理等高级功能,显著提升开发效率和项目管理能力。开发者可通过对话式交互完成需求理解到产品发布的全过程,实现高效敏捷开发。最新2.0版本在代码生成、跨语言编程、单元测试自动生成及图生代码等方面有显著提升,进一步优化了用户体验。
|
10天前
|
人工智能 编解码 测试技术
阿里云通义千问发布多款AI大模型 多模态、长文本能力全面升级!
阿里云通义千问发布多款AI大模型 多模态、长文本能力全面升级!