当前位置: 首页 > news >正文

邯郸形象网站建设旅行社网站程序

邯郸形象网站建设,旅行社网站程序,公司企业邮箱申请,用ps做衣服网站首页Springboot Async 多线程获取返回值 需求背景 最近需要用到多线程, 自己维护线程池很麻烦, 正好看到Springboot集成线程池的例子, 这里自己做了个尝试和总结, 记录一下, 也分享给需要的朋友; 不考虑事务的情况下, 这个多线程实现比较简单, 主要有以下几点: 在启动类加上Enab…

Springboot @Async 多线程获取返回值

需求背景

最近需要用到多线程, 自己维护线程池很麻烦, 正好看到Springboot集成线程池的例子, 这里自己做了个尝试和总结, 记录一下, 也分享给需要的朋友;
不考虑事务的情况下, 这个多线程实现比较简单, 主要有以下几点:

  1. 在启动类加上@EnableAsync注解, 开启异步执行支持;
  2. 编写线程池配置类, 别忘了@Configuration, 和@Bean注解;
  3. 编写需要异步执行的业务, 放到单独的类中 (可以定义为 service, 因为需要 spring 管理起来才能用 );

举栗个现实问题:

需求:拉取 业务数据不能超过 5秒。
拉取第三方数据 ,分别需要拉取 A业务数据(需要2秒) 、拉取 B业务数据(需要2秒)、拉取 C业务数据(需要2秒) ,最后再一并返回给前端。
解决方案: Executor+@Async(“参数”)+CompletableFutureFuture

上代码

1.启动类上加注解

@EnableAsync

2.配置类

其他配置请参考配置类示例

@Slf4j
//@EnableAsync//(该注解加在启动类或线程池配置类上都可以)
@Configuration
public class ThreadPoolCommonConfig extends AsyncConfigurerSupport {@Bean("asyncExecutor")public Executor asyncExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(20);taskExecutor.setMaxPoolSize(100);taskExecutor.setQueueCapacity(1000);taskExecutor.setKeepAliveSeconds(60);taskExecutor.setThreadNamePrefix("asyncExecutorConfig--");taskExecutor.setWaitForTasksToCompleteOnShutdown(true);taskExecutor.setAwaitTerminationSeconds(60);taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());// MDC 装饰器  传递MDC中的信息taskExecutor.setTaskDecorator(new MdcTaskDecorator());return taskExecutor;}
}

3.异步方法(所属类需交由Spring管理)

3.1.@Async + CompletableFuture(推荐)

@Override
@Async("asyncExecutor")
public CompletableFuture<String> list(String s) {log.info("{}: {}", s, Thread.currentThread().getName());ThreadUtil.sleep(2, TimeUnit.SECONDS);log.info("{}查询列表成功", s);return CompletableFuture.completedFuture(s);
}

3.2.@Async + Future

// 异步执行的方法, 注解内为自定义线程池类名
@Override
@Async("asyncExecutor")
public Future<Integer> test(Integer i) {log.info("{}: {}", i, Thread.currentThread().getName());ThreadUtil.sleep(1, TimeUnit.SECONDS);log.info("@Async执行:{}", i);return new AsyncResult(i);
}

4.调用

4.1.CompletableFuture获取返回值(推荐)

CompletableFuture<String> future1 = testService.list("A");
CompletableFuture<String> future2 = testService.list("B");
// 阻塞所有异步线程执行完毕
CompletableFuture.allOf(future1, future2).join();
// 阻塞,直至 future1 和 future2 的异步线程执行完毕
log.info("future结果:{},{}", future1.get(), future2.get());

4.2.Future获取返回值

Future<Integer> future1 = testService.test(1);
Future<Integer> future2 = testService.test(2);
// 阻塞,直至 future1 的异步线程执行完毕
log.info("future1结果:{}", future1.get());
// 阻塞,直至 future2 的异步线程执行完毕
log.info("future1结果:{}", future2.get());

参考文档

Async注解使用和CompletableFuture注解获取返回值
Springboot @Async 多线程获取返回值
Spring Boot中调用@Async注解的异步方法并获取返回值

http://www.yayakq.cn/news/245764/

相关文章:

  • ps做阿里网站分辨率设置十大电商平台有哪些
  • 可以做用户画像的网站软件外包网
  • 国外的电商网站有哪些专业商城网站建设报价
  • 网站开发tt0546徐州住房和城乡建设局网站
  • 网站建设简历自我评价网站设计怎么做一点首页就跳转
  • 微网站怎么制作网站服务包括什么
  • 怎样做可以互动留言的网站社交电商
  • 巧克力网站模板建立网站有什么用
  • 网站如何做点击链接wordpress半次元主题
  • 做软件贵还是做网站贵怎么自己制作一个好的网站
  • delphi 可做网站吗江苏省工程建设信息官方网
  • 东营做网站建设的公司室内设计联盟官方网站图片
  • 网站建设需要保存什么经典重庆网站
  • php做网站的分站贵阳app开发公司哪家强
  • 做网站需要几个程序网站的优缺点
  • 网站页面footer的copy网站下载不了怎么解决
  • 网站建设与维护课程设计报告书湖北省城乡与住房建设厅网站
  • 母婴网站模板中英文网站设计
  • 广东专业网站建设公司重庆祥云平台做网站
  • 济南做网站的价格杭州网站界面设计
  • 黄岛区建设局网站网站建设与管理设计
  • 基金公司网站建设免费三网合一网站系统
  • 教育机构网站源码怎么做一张图片的网站
  • asp.net创建项目和创建网站的区别服装商店的网站建设要求
  • 西安网站制作排名phpstudy
  • wordpress 站点群做网站需要留什么条件
  • php网站超市源码北京华诚传媒有限公司官方网站
  • 网络网站wordpress 读取副标题
  • 手机网站制作服务做阿里巴巴网站找谁
  • 珠海市品牌网站建设公司注册公司注册地址怎么弄