怎么在SpringBoot中异步调用方法并接收返回值?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
创新互联建站是专业的西夏网站建设公司,西夏接单;提供成都网站建设、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行西夏网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
步骤1:配置线程池,添加@Configuration和@EnableAsync注解
@Configuration
@EnableAsync
public class ExecutorConfig {
/**
* 线程池
*
* @return
*/
@Bean(name = "asyncExecutor")
public Executor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(15);
executor.setQueueCapacity(25);
executor.setKeepAliveSeconds(200);
executor.setThreadNamePrefix("async-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 等待所有任务都完成再继续销毁其他的Bean
executor.setWaitForTasksToCompleteOnShutdown(true);
// 线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住
executor.setAwaitTerminationSeconds(60);
executor.initialize();
return executor;
}
}步骤2:定义方法A,方法B,方法C,方法D
@Service
public class AsyncService {
@Async("asyncExecutor")
public Future methodB(){
try{
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
return new AsyncResult<>(1);
}
@Async("asyncExecutor")
public Future methodC(){
try{
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
return new AsyncResult<>(2);
}
@Async("asyncExecutor")
public Future methodD(){
try{
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
return new AsyncResult<>(3);
}
}
@GetMapping("test")
public Integer methodA() throws Exception{
long start = System.currentTimeMillis();
Future future1 = asyncService.methodB();
Future future2 = asyncService.methodC();
Future future3 = asyncService.methodD();
Integer x = future1.get();
Integer y = future2.get();
Integer z = future3.get();
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start));
return x + y +z;
}
} 结果:


springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。