SpringBoot中启用虚拟线程
1. 什么是虚拟线程
虚拟线程是JDK21版本正式发布的一个新特性。虚拟线程和平台线程主要区别在于,虚拟线程在运行周期内不依赖操作系统线程:它们与硬件脱钩,因此被称为“虚拟”。这种解耦是由JVM提供的抽象层赋予的。
虚拟线程的运行成本远低于平台线程。它们消耗的内存要少得多。这就是为什么我们可以创建数百万个虚拟线程而不会出现内存不足的问题,而标准平台(或内核)线程只能创建数百个。
因此,我们可以无需依赖异步代码即可管理高度可扩展的应用程序。
2. 代码实战
在SpringBoot项目中创建MyThreadConfig
类
@EnableAsync @Configuration public class MyThreadConfig { @Bean public AsyncTaskExecutor applicationTaskExecutor() { return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor()); } @Bean public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() { return protocolHandler -> { protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor()); }; } }
上述代码主要是将SpringBoot内置的线程池修改为虚拟线程。第一个Spring Bean(ApplicationTaskExecutor
)将取代标准的ApplicationTaskExecutor
,提供一个 Executor
,为每个任务启动一个新的虚拟线程。第二个 Bean 命名为 ProtocolHandlerVirtualThreadExecutorCustomizer
,它将以同样的方式定制标准的 TomcatProtocolHandler
注意在SpringBoot3.2.0版本后可以通过配置方式application.yml
开启
spring: threads: virtual: enabled: true
3. 总结
项目改用虚拟线程后,HTTP请求降低30%的耗时,用户体验更佳。
本文作者:护发师兄
本文链接:https://www.cnblogs.com/jonil/p/17778587.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步