zoukankan      html  css  js  c++  java
  • 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));
        }
    }
    

    运行结果

  • 相关阅读:
    操作系统第一章绪论
    JavaScript推断E-mail地址是否合法
    projecteuler----&gt;problem=8----Largest product in a series
    QQ聊天原理初识
    窗体和线程漫谈之工作线程怎样将数据的处理结果显示到窗体
    Swift
    iOS-UIApplication详解
    iOS开发拓展篇——如何把项目托管到GitHub
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/andyfengzp/p/6824253.html
Copyright © 2011-2022 走看看