zoukankan      html  css  js  c++  java
  • 使用异步开启新的线程Spring异步方法注解@Async

      在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的。

      特别注意的地方:

    1.  在调用@Async方法的类后面添加注解: @EnableAsync
    2.  在被调用的方法增加@Async注解
    3.  调用和被调用, 不能在一个类里面定义, 要分开定义.
    4.  方法所属的类的对象需要是被Spring容器所管理的,也就是指被@Controller @Service @Repository @Component这些注解的类  

      

    1. 我们不关心方法的返回值
    2. 方法的返回值为void
    3. 通过Future对象异步地获得返回值

      Future接口的四个方法

    // 取消任务 boolean cancel(boolean mayInterruptIfRunning);

    // 判断任务是否已取消 boolean isCancelled();

    // 判断任务是否已结束 boolean isDone();

    // 获得任务执行结果 get();

    // 获得任务执行结果,支持超时 get(long timeout, TimeUnit unit);

    利用 Java 并发包提供的 Future 可以很容易获得异步任务的执行结果,无论异步任务是通过线程池 ThreadPoolExecutor 执行的,还是通过手工创建子线程来执行的。Future 可以类比为现实世界里的提货单,比如去蛋糕店订生日蛋糕,蛋糕店都是先给你一张提货单,你拿到提货单之后,没有必要一直在店里等着,可以先去干点其他事,比如看场电影;等看完电影后,基本上蛋糕也做好了,然后你就可以凭提货单领蛋糕了。

      利用多线程可以快速将一些串行的任务并行化,从而提高性能;如果任务之间有依赖关系,比如当前任务依赖前一个任务的执行结果,这种问题基本上都可以用 Future 来解决。在分析这种问题的过程中,建议你用有向图描述一下任务之间的依赖关系,同时将线程的分工也做好,类似于烧水泡茶最优分工方案那幅图。对照图来写代码,好处是更形象,且不易出错

    https://blog.csdn.net/pizicai007/article/details/107134991/

  • 相关阅读:
    ESFramework介绍之(32)―― Tcp客户端核心组件关系图
    Java -- 在Eclipse上使用XFire开发WebService
    DTS开发记录(1)--系统总体结构
    ESFramewor使用技巧(3) -- 在插件中使用Spring.net
    DTS开发记录(序)
    给关注ESFramework的朋友们 2006.06.25
    ESFramework介绍之(34)―― ITcpServerAgent和IUdpServerAgent组件关系图
    Java -- 在Eclipse上使用Hibernate
    【C#2.0】点滴(不断补充中......)
    Java -- 在Eclipse上使用Spring
  • 原文地址:https://www.cnblogs.com/wwwcf1982603555/p/13954289.html
Copyright © 2011-2022 走看看