ToB企服应用市场:ToB评测及商务社交产业平台

标题: SpringBoot中启用虚拟线程 [打印本页]

作者: 瑞星    时间: 2023-11-12 02:10
标题: SpringBoot中启用虚拟线程
1. 什么是虚拟线程

虚拟线程是JDK21版本正式发布的一个新特性。虚拟线程和平台线程主要区别在于,虚拟线程在运行周期内不依赖操作系统线程:它们与硬件脱钩,因此被称为“虚拟”。这种解耦是由JVM提供的抽象层赋予的。
虚拟线程的运行成本远低于平台线程。它们消耗的内存要少得多。这就是为什么我们可以创建数百万个虚拟线程而不会出现内存不足的问题,而标准平台(或内核)线程只能创建数百个。
因此,我们可以无需依赖异步代码即可管理高度可扩展的应用程序。
2. 代码实战

在SpringBoot项目中创建MyThreadConfig类
  1. @EnableAsync
  2. @Configuration
  3. public class MyThreadConfig {
  4.     @Bean
  5.     public AsyncTaskExecutor applicationTaskExecutor() {
  6.         return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());
  7.     }
  8.     @Bean
  9.     public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {
  10.         return protocolHandler -> {
  11.             protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
  12.         };
  13.     }
  14. }
复制代码
上述代码主要是将SpringBoot内置的线程池修改为虚拟线程。第一个Spring Bean(ApplicationTaskExecutor)将取代标准的ApplicationTaskExecutor,提供一个 Executor,为每个任务启动一个新的虚拟线程。第二个 Bean 命名为 ProtocolHandlerVirtualThreadExecutorCustomizer,它将以同样的方式定制标准的 TomcatProtocolHandler
3. 总结

项目改用虚拟线程后,HTTP请求降低30%的耗时,用户体验更佳。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4