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来返回异步调用的结果,实现异步回调
*/
@Async
public Future 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("test1 is done!");
}

@Async
public Future 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("test2 is done!");
}

@Async
public Future 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("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 test1 = asyncTest.test1();
Future test2 = asyncTest.test2();
Future test3 = asyncTest.test3();

while(true) {
if(test1.isDone() && test2.isDone() && test3.isDone())
break;

Thread.sleep(500);
}

System.out.println("end 耗时: " + (System.currentTimeMillis() - begin));
}
}

运行结果

posted @ 2017-05-08 11:30  fengzp  阅读(12018)  评论(1)    收藏  举报