• spring boot实现异步调用


    今天在这里学习下使用springboot的异步调用async

    首先使用@EnableAsync开启异步功能

    /**
    * @author fengzp
     * @date 17/5/8
     * @email fengzp@gzyitop.com
     * @company 广州易站通计算机科技有限公司
     */
    @SpringBootApplication
    @EnableAsync
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    

    测试类

        /**
     * @author fengzp
     * @date 17/5/8
     * @email fengzp@gzyitop.com
     * @company 广州易站通计算机科技有限公司
     */
    @Component
    public class AsyncTest {
    
        public static Random random =new Random();
    
        /**
    	 * @Async所修饰的函数不要定义为static类型,否则异步调用不会生效
    	 *
    	 * 这里通过返回Future<T>来返回异步调用的结果,实现异步回调
    	 */
    	@Async
    	public Future<String> test1() throws InterruptedException {
    	    System.out.println("test1 begin");
    	    long begin = System.currentTimeMillis();
    	    Thread.sleep(random.nextInt(10000));
    	    System.out.println("test1 end " + (System.currentTimeMillis() - begin));
    	    return new AsyncResult<String>("test1 is done!");
    	}
    
        @Async
        public Future<String> test2() throws InterruptedException {
            System.out.println("test2 begin");
            long begin = System.currentTimeMillis();
            Thread.sleep(random.nextInt(10000));
            System.out.println("test2 end " + (System.currentTimeMillis() - begin));
            return new AsyncResult<String>("test2 is done!");
        }
    
        @Async
        public Future<String> test3() throws InterruptedException {
            System.out.println("test3 begin");
            long begin = System.currentTimeMillis();
            Thread.sleep(random.nextInt(10000));
            System.out.println("test3 end " + (System.currentTimeMillis() - begin));
            return new AsyncResult<String>("test3 is done!");
        }
    }
    

    测试

    /**
     * @author fengzp
     * @date 17/5/8
     * @email fengzp@gzyitop.com
     * @company 广州易站通计算机科技有限公司
     */
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = Application.class)
    public class Test {
    
        @Autowired
        AsyncTest asyncTest;
    
        @org.junit.Test
        public void test() throws InterruptedException {
            System.out.println("begin");
            long begin = System.currentTimeMillis();
            Future<String> test1 = asyncTest.test1();
            Future<String> test2 = asyncTest.test2();
            Future<String> test3 = asyncTest.test3();
    
            while(true) {
                if(test1.isDone() && test2.isDone() && test3.isDone())
                    break;
    
                Thread.sleep(500);
            }
    
            System.out.println("end 耗时: " + (System.currentTimeMillis() - begin));
        }
    }
    

    运行结果

  • 相关阅读:
    一个好用的小图标库
    前端应用笔记
    HttpClient的使用今天遇到一个巨坑——HttpEntity内容取不出来
    HttpClient忽略SSL证书
    SpringBoot+Thyemelaf开发环境正常,打包jar发到服务器就报错Template might not exist or might not be accessible
    查询Mysql数据库所有数据库所占磁盘空间大小
    Docker安装并运行mysql5.6数据库
    Docker下载镜像太慢问题
    Docker安装Nginx
    vue-router导航守卫
  • 原文地址:https://www.cnblogs.com/andyfengzp/p/6824253.html
Copyright © 2020-2023  润新知