SpringBoot中启用虚拟线程

瑞星  金牌会员 | 2023-11-12 02:10:34 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 875|帖子 875|积分 2625

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%的耗时,用户体验更佳。

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

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表