我从 JDK21 和虚拟线程开始。 我正在使用 Spring Framework 6.1.12 和 Spring Batch 5.1.2
我成功地使用了一个简单的任务执行器,如下所示:
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="20" />
<property name="waitForTasksToCompleteOnShutdown" value="true" />
</bean>
为了测试虚拟线程和JDK21,我改成这样:
<bean id="taskExecutor" class="org.springframework.core.task.VirtualThreadTaskExecutor">
<constructor-arg name="threadNamePrefix" value="VIRTUAL-thread" />
</bean>
所以,我有一些疑问:
所以,简而言之,我已经阅读了有关虚拟线程和性能的精彩内容,并且我想在 Spring 和 Spring Batch 中执行虚拟线程来测试我的软件中的性能。如果您有一些从平台线程迁移到虚拟线程的指南、技巧等,我们非常感谢您的帮助。
关于你的问题。
SimpleAsyncTaskExecutor
,它允许更多的配置和控制。public SimpleAsyncTaskExecutor taskExecutor() {
var taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.setVirtualThreads(true);
taskExecutor.setConcurrencyLimit(20); // based on your max poolsize
return taskExecutor;
}
你正在看错误的,实际上有2个不同的,因为Spring是作为一个多版本jar发布的。特定于 JDK 21 的代码位于“不同的目录”中,并且仅在 JDK 21+ 上加载,并且将加载而不是您正在查看的代码。