springboot多线程提供逻辑计算的实现思路

文章展示了如何配置线程池以及使用CompletableFuture进行多线程并行处理。通过对比不同实现方式的`test`和`test1`方法,显示了线程池配合CompletableFuture在处理大量并发任务时的效率优势,`test`方法总耗时仅为1032毫秒,而单线程顺序执行的`test1`方法耗时101021毫秒。
摘要由CSDN通过智能技术生成
  1. 配置线程池

 public static ThreadPoolExecutor executor = new ThreadPoolExecutor(100, 200,
            300 , TimeUnit.SECONDS, new LinkedBlockingDeque<>(10000),
            Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
  1. 编写多线程方法

@CrossOrigin
    @ApiOperation("测试")
    @PostMapping(value="test")
    public void Test() throws ExecutionException, InterruptedException {
        int count = 100;
        long startTime=System.currentTimeMillis();
        List<CompletableFuture> completableFutures=new ArrayList<>();
        for(int j=0;j<count;j++){
            int finalJ = j;
            CompletableFuture<Void> future=CompletableFuture.runAsync(()->{
                System.out.println("当前线程名是:"+Thread.currentThread().getName()+" "+finalJ);
                try {
                   ---此处添加逻辑计算代码段----
                      method();
                   ---此处添加逻辑计算代码段----
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            },executor);
            completableFutures.add(future);
        }
        CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).get();
        long endTime=System.currentTimeMillis();
        System.out.println("总耗时:"+(endTime-startTime));

    }
  1. 示例对比代码

public static ThreadPoolExecutor executor = new ThreadPoolExecutor(100, 200,
            300 , TimeUnit.SECONDS, new LinkedBlockingDeque<>(10000),
            Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());


    @ApiOperation("测试")
    @PostMapping(value="test")
    public void Test() throws ExecutionException, InterruptedException {
        int count = 100;
        long startTime=System.currentTimeMillis();
        List<CompletableFuture> completableFutures=new ArrayList<>();
        for(int j=0;j<count;j++){
            int finalJ = j;
            CompletableFuture<Void> future=CompletableFuture.runAsync(()->{
                System.out.println("当前线程名是:"+Thread.currentThread().getName()+" "+finalJ);
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            },executor);
            completableFutures.add(future);
        }
        CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).get();
        long endTime=System.currentTimeMillis();
        System.out.println("总耗时:"+(endTime-startTime));

    }


    @CrossOrigin
    @ApiOperation("测试")
    @PostMapping(value="test1")
    public void Test1() throws ExecutionException, InterruptedException {
        int count = 100;
        long startTime=System.currentTimeMillis();
        for(int j=0;j<count;j++){
            System.out.println("当前线程名是:"+Thread.currentThread().getName()+" "+j);
            TimeUnit.SECONDS.sleep(1);
        }
        long endTime=System.currentTimeMillis();
        System.out.println("总耗时:"+(endTime-startTime));

    }

对比结果 test总耗时:1032毫秒,test1总耗时:101021毫秒

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值