hzk11o11k11o 2021-04-02 09:06 采纳率: 30%
浏览 920
已采纳

springboot的@Async,如何控制执行顺序?

假设我有三个方法想要异步,在一个类中,有如下调用

Utils.insertUser();

Utils.insertAddress();

Utils.insertInformation();

Utils.selectAll()

首先,前三个方法是设置了@Async的注解方法,假设他是往数据库里面插入数据,第四个是把插入的数据查出来,数据来源就是前三个方法,这个方法没有@Async注解。

现在的问题是,由于前三个方法设置了@Async,导致前三个方法可能还未执行完毕,第四个查询方法就已经开始执行了,这样就没有意义了。所以,如何做到保证前三个方法异步执行,且全部执行完毕后,再执行第四个方法?

  • 写回答

6条回答 默认 最新

  • CSDN专家-三岁丫 2021-04-02 10:09
    关注

    其实你可以不用 @Asyn,只是想要这三个操作并发执行而已

      public static void main(String[] args) throws Exception {
        ExecutorService executorService = Executors.newCachedThreadPool();
        CountDownLatch latch = new CountDownLatch(3);
    
        executorService.execute(() -> {
          try {
            TimeUnit.SECONDS.sleep(1);
            System.out.println("执行第一个操作");
          } catch (InterruptedException e) {
          } finally {
            latch.countDown();
          }
        });
    
        executorService.execute(() -> {
          try {
            TimeUnit.SECONDS.sleep(2);
            System.out.println("执行第二个操作");
          } catch (InterruptedException e) {
          } finally {
            latch.countDown();
          }
        });
    
        executorService.execute(() -> {
          try {
            TimeUnit.SECONDS.sleep(3);
            System.out.println("执行第三个操作");
          } catch (InterruptedException e) {
          } finally {
            latch.countDown();
          }
        });
        
        // 等待前三个执行完毕
        latch.await();
    
        System.out.println("执行第四个操作");
        executorService.shutdown();
      }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 LSPI算法的大问题
  • ¥15 java导出word 动态填充数据
  • ¥15 python SSH连接设备使用STD读配置卡死的问题
  • ¥20 扑克的算牌公式及软件制作
  • ¥20 如何通过云图中RPG去计算云图上不同位置的值?
  • ¥15 请问不小心下载到了钓鱼软件怎么办?
  • ¥15 求国博抢票 求国博抢票 有的私
  • ¥50 swiftui @query 报错
  • ¥50 怎么解决刷卡或扫码后,点击软件输入框,win10屏幕键盘不会自动弹出的问题
  • ¥15 如何使用arcgispro的训练深度模型,发现water和nowater精度为0?(相关搜索:深度学习)