CompletableFuture实践用法


import com.atguigu.common.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadPoolExecutor;

@RestController
@RequestMapping("/product/thread")
public class ThreadTestController {

    @Autowired
    private ThreadPoolExecutor threadPoolExecutor;


    @RequestMapping("/test")
    public R test() throws Exception {

        long start = System.currentTimeMillis();

        //第一步,异步执行:没有返回值
        CompletableFuture<String> main = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(3000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("执行了第一个任务了....");
            return "main";
        }, threadPoolExecutor);

        //第二步,等待第一步执行完成后进行异步执行
        CompletableFuture<Void> two = main.thenAcceptAsync((res) -> {
            try {
                Thread.sleep(3000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("执行了第二个任务....\t" + res);
        }, threadPoolExecutor);

        //第三步,等待第一步执行完成后进行异步执行
        CompletableFuture<Void> thread = main.thenAcceptAsync((res) -> {
            try {
                Thread.sleep(3000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("执行了第三个任务....\t" + res);
        }, threadPoolExecutor);


        //等待所有完成
        CompletableFuture.allOf(main,two,thread).get();

        System.out.println("主线程执行完毕.....");


        long end = System.currentTimeMillis();

        System.out.println("main总是用时间:"+(end-start));  //所以总共是花了六秒时间

        return R.ok();
    }






}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值