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

越秀定制型网站建设喷码机营销型网站

越秀定制型网站建设,喷码机营销型网站,永嘉移动网站建设公司,如何关闭wordpress默认编辑器Spring Boot 异步编程深入剖析 1. 异步方法的使用 原理深度解析 Spring Boot 的异步方法基于 Spring 的 AOP#xff08;面向切面编程#xff09;实现。当在方法上添加 Async 注解时#xff0c;Spring 会为该方法所在的类创建一个代理对象。当调用该异步方法时#xff0c…Spring Boot 异步编程深入剖析 1. 异步方法的使用 原理深度解析 Spring Boot 的异步方法基于 Spring 的 AOP面向切面编程实现。当在方法上添加 Async 注解时Spring 会为该方法所在的类创建一个代理对象。当调用该异步方法时实际上是调用代理对象的方法代理对象会将该方法的执行委托给线程池中的一个线程去执行而调用线程会继续执行后续代码从而实现异步执行。 更复杂的使用场景 除了返回 CompletableFuture还可以使用 ListenableFuture在 Spring 4.0 之前或无返回值的异步方法。 import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.SettableListenableFuture;import java.util.concurrent.CompletableFuture;Service public class AsyncService {// 无返回值的异步方法Asyncpublic void asyncVoidMethod() {try {Thread.sleep(2000);System.out.println(Async void method completed);} catch (InterruptedException e) {e.printStackTrace();}}// 使用 ListenableFutureAsyncpublic ListenableFutureString asyncListenableMethod() {SettableListenableFutureString future new SettableListenableFuture();try {Thread.sleep(2000);future.set(Async listenable method completed);} catch (InterruptedException e) {future.setException(e);}return future;} }踩坑记录 方法调用问题如果在同一个类中调用自身的异步方法Async 注解不会生效。因为 Spring 的 AOP 代理是基于外部调用的同一个类中的方法调用不会经过代理对象。解决方法是将异步方法提取到另一个服务类中。异常处理问题无返回值的异步方法中的异常不会被调用者捕获因为调用者不会等待方法执行完成。可以在异步方法内部进行异常处理或者使用 CompletableFuture 来捕获异常。 使用心得 对于一些耗时的 I/O 操作如数据库查询、网络请求等使用异步方法可以显著提高应用程序的响应性能。合理使用 CompletableFuture 可以方便地处理异步任务的结果和异常同时还可以进行任务的组合和链式调用。 2. 线程池配置 深入理解线程池参数 核心线程数corePoolSize线程池保持的最小线程数。当有新任务提交时如果线程池中的线程数小于核心线程数会创建新的线程来执行任务。最大线程数maxPoolSize线程池允许的最大线程数。当队列已满且线程数小于最大线程数时会创建新的线程来执行任务。队列容量queueCapacity用于存储等待执行的任务的队列的容量。当线程池中的线程数达到核心线程数时新任务会被放入队列中等待执行。线程空闲时间keepAliveTime当线程池中的线程数超过核心线程数时空闲线程在经过一定时间后会被销毁。 动态调整线程池参数 可以通过编写自定义的线程池管理器来动态调整线程池的参数。 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;Configuration public class AsyncConfig implements AsyncConfigurer {private ThreadPoolTaskExecutor executor;OverrideBean(name asyncExecutor)public Executor getAsyncExecutor() {executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(25);executor.setThreadNamePrefix(AsyncThread-);executor.initialize();return executor;}public void adjustCorePoolSize(int corePoolSize) {executor.setCorePoolSize(corePoolSize);executor.initialize();} }踩坑记录 队列容量设置不合理如果队列容量设置过大可能会导致大量任务堆积在队列中从而影响系统的响应性能。如果队列容量设置过小可能会导致线程池频繁创建新的线程增加系统的开销。线程池耗尽问题如果任务提交速度过快超过了线程池的处理能力可能会导致线程池耗尽从而抛出 RejectedExecutionException 异常。可以通过合理设置线程池参数和实现自定义的拒绝策略来解决这个问题。 使用心得 根据应用程序的实际情况合理设置线程池的参数避免资源浪费和性能瓶颈。定期监控线程池的状态根据系统的负载情况动态调整线程池的参数。 3. 异步任务的监控与管理 高级监控方法 除了使用 CompletableFuture 来监控任务状态还可以使用 Spring Boot Actuator 来监控线程池的状态。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId /dependency通过访问 /actuator/metrics 端点可以查看线程池的相关指标如活跃线程数、任务完成数等。 任务链管理 可以使用 CompletableFuture 的 thenApply、thenAccept、thenCompose 等方法来构建任务链实现复杂的异步任务管理。 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.CompletableFuture;RestController public class AsyncController {Autowiredprivate AsyncService asyncService;GetMapping(/asyncChain)public String asyncChain() {CompletableFutureString future1 asyncService.asyncMethod();CompletableFutureString future2 future1.thenApply(result - result - Next step);future2.thenAccept(finalResult - System.out.println(finalResult));return Async chain started;} }踩坑记录 任务链异常处理问题在任务链中如果某个任务抛出异常后续的任务可能会受到影响。可以使用 exceptionally 方法来处理异常确保任务链的稳定性。内存泄漏问题如果 CompletableFuture 没有正确处理可能会导致内存泄漏。例如如果一个 CompletableFuture 一直处于未完成状态会占用内存资源。 使用心得 利用任务链可以实现复杂的异步业务逻辑提高代码的可读性和可维护性。及时处理异步任务中的异常避免异常扩散导致系统崩溃。 通过深入理解 Spring Boot 异步编程的原理和机制合理配置线程池以及有效地监控和管理异步任务可以充分发挥异步编程的优势提高应用程序的性能和响应能力。
http://www.w-s-a.com/news/493851/

相关文章:

  • 网站建设与部署阿里云大学百度付费推广有几种方式
  • 作品集怎么做网站个人简历模板免费下
  • 工业网站素材重庆关键词自动排名
  • 拖拽式网站建设费用微网站怎么做的好名字
  • 长沙电信网站备案谷歌推广怎么做最有效
  • 网站建设与管理总结报告华为开发者联盟
  • 门诊部网站建设天空建筑网站
  • 扬州市城乡建设网站高端品牌鞋子有哪些牌子
  • 杭州网站建设招聘网长沙网络销售公司
  • 网站制作一年多少钱免费做电子章网站
  • 信誉好的营销网站建设徐州市铜山新区建设局网站
  • 建行网站关于我们山西seo和网络推广
  • 1m带宽做网站怎么样深圳网站建设制作开发公司
  • 网站建设 服务内容 费用郴州网站建设公司哪里有
  • 网站关键词重要性育才网站建设
  • 网络安全形势下怎么建设学校网站wordpress最新主题下载
  • 自己建设网站需要什么条件.gs域名做网站怎么样
  • 网上做公益的网站推广手机卡返佣平台
  • 网站是公司域名是个人可以南京建设银行官方网站
  • 做互联网网站的会抓百度网盟推广 网站
  • 商务网站开发设计结论微信报名小程序怎么制作
  • 网站建设销售简历wordpress七比2
  • 制作网站报价工程项目查询哪个网站
  • 深圳移动网站建设制作公司网站建设的认识
  • 网站建设脚本语言有哪些想开网店哪个平台好
  • 视频网站用什么做的好深圳的小程序开发公司
  • 南京网站定制开发商城网站免费模板
  • 青海学会网站建设公司照片组合拼图
  • 中国建设银行福清分行网站爱站网权重查询
  • 外贸通网站建设网站建设7个主要流程图