java使用多线程并行处理逻辑后合并处理结果(Java多线程ExecutorService方式)

1. 需求描述

业务逻辑中有时候需要使用多线程去分别执行不同的方法,然后将所有方法的返回结果进行合并,即并行调用若干方法,然后将若干方法各自的返回结果做下一步处理的场景。

2. 使用Java多线程实现(本质上是ExecutorService方式)

package xxx;

import com.google.common.collect.Lists;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.scheduling.annotation.Async;

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

@SpringBootTest
public class AsyncTest {

    @Test
    void test() {
    	//使用ExecutorService方式
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        //计数器
        CountDownLatch countDownLatch = new CountDownLatch(3);

		//假如有3个方法,各自需要1s 5s 10s 然后返回1 2 3
        Future<String> future1 = executorService.submit(() -> {
            try{
            	//这里其实就可以写Service的某个方法,让其异步执行即可
                Thread.sleep(1000);
                return "1";
            }finally {countDownLatch.countDown();}
        });
        Future<String> future2 = executorService.submit(() -> {
            try{
            	//这里其实就可以写Service的某个方法,让其异步执行即可
                Thread.sleep(5000);
                return "2";
            }finally {countDownLatch.countDown();}
        });
        Future<String> future3 = executorService.submit(() -> {
            try{
            	//这里其实就可以写Service的某个方法,让其异步执行即可
                Thread.sleep(10000);
                return "3";
            }finally {countDownLatch.countDown();}
        });
        countDownLatch.await();
        System.out.println(future1.get());
        System.out.println(future2.get());
        System.out.println(future3.get());
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end-start));
    }
}

以上3个逻辑块会并行执行,由于第3个逻辑块需要10s左右时间,并行执行后其实整个逻辑耗时肯定>=10s,实现了不同耗时逻辑的并行执行,然后你可以拿着他们的结果进行下一步的处理,切记需要.get()才能拿到异步后的返回结果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgv3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值