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%的耗时,用户体验更佳。
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容