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 文档标题滚动 实例
    Unity3D初学之2D动画制
    Uni2D 入门 -- Skeletal Animation
    Uni2D 入门 -- Asset Table
    Uni2D 入门 -- Atlas转载 http://blog.csdn.net/kakashi8841/article/details/17588095
    Uni2D 入门 -- Animation Clip 和 Animation API
    Uni2D入门
    将博客搬至CSDN
    unity 2048Game
    c#单例模式
  • 原文地址:https://www.cnblogs.com/andyfengzp/p/6824253.html
Copyright © 2011-2022 走看看