update 优化 延迟线程池 支持虚拟线程

This commit is contained in:
疯狂的狮子Li 2025-01-02 15:42:24 +08:00
parent 41a3bdf73d
commit a46c798e01

View File

@ -10,11 +10,11 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.task.VirtualThreadTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
/** /**
@ -51,23 +51,15 @@ public class ThreadPoolConfig {
*/ */
@Bean(name = "scheduledExecutorService") @Bean(name = "scheduledExecutorService")
protected ScheduledExecutorService scheduledExecutorService() { protected ScheduledExecutorService scheduledExecutorService() {
ThreadFactory threadFactory; // daemon 必须为 true
// 是否启用虚拟线程 BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder().daemon(true);
if (SpringUtils.isVirtual()) { if (SpringUtils.isVirtual()) {
// 虚拟线程必须为守护线程 daemon 只能是 true builder.namingPattern("virtual-schedule-pool-%d").wrappedFactory(new VirtualThreadTaskExecutor().getVirtualThreadFactory());
threadFactory = new BasicThreadFactory.Builder()
.daemon(true)
.namingPattern("virtual-schedule-pool-%d")
.wrappedFactory(Thread.ofVirtual().factory())
.build();
} else { } else {
threadFactory = new BasicThreadFactory.Builder() builder.namingPattern("schedule-pool-%d");
.daemon(true)
.namingPattern("schedule-pool-%d")
.build();
} }
ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(core, ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(core,
threadFactory, builder.build(),
new ThreadPoolExecutor.CallerRunsPolicy()) { new ThreadPoolExecutor.CallerRunsPolicy()) {
@Override @Override
protected void afterExecute(Runnable r, Throwable t) { protected void afterExecute(Runnable r, Throwable t) {