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));
        }
    }
    

    运行结果

  • 相关阅读:
    移动端 推送的那些东西
    git 常用命令
    顶部提示 先下移出来 再上移出去
    ViewPager 高度自适应
    进制转换
    Android 适配
    适配三星Galaxy S8及S8+ 屏幕比例为 18.5:9
    dpi dp px 换算关系
    资源前缀及代码分析总结
    判断是否快速点击或者滑动
  • 原文地址:https://www.cnblogs.com/andyfengzp/p/6824253.html
Copyright © 2011-2022 走看看