ThreadPoolTask Scheduler在运行时更改poolSize

问题描述 投票:0回答:1

我创建调度程序:

@Bean
TaskScheduler taskScheduler(){
    ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
    threadPoolTaskScheduler.setPoolSize(5);
    threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
    threadPoolTaskScheduler.setThreadNamePrefix("Test-");
    return threadPoolTaskScheduler;
}

我等一下:

每1秒触发我的预定方法并启动5个线程(PoolSize(5)),每个线程将成为我的逻辑。为此我在@Component bean中创建了预定方法:

@Slf4j
@Component
public class MyScheduler {

    private final TaskScheduler taskScheduler;

    public MyScheduler(TaskScheduler taskScheduler) {
        this.taskScheduler = taskScheduler;
    }

    @Scheduled(fixedDelay = 1000L)
    public void test(){
        taskScheduler.schedule(() -> {
            try {
                Thread.sleep(9000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info("test");
        }, new Date());

    }
}

它工作正常。

每1秒启动test()方法并工作9秒。在5 secon我有完整的threadPool并等待第一个免费线程。如果我设置sleep(5000L) - threadPool无法填满。

但现在我需要在运行时更改poolSize。例如从5到10.我该怎么办?

java multithreading scheduled-tasks scheduler taskscheduler
1个回答
0
投票

根据文档,您可以通过调用setPoolSize()在运行时调整调度程序的大小(请参阅:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/concurrent/ThreadPoolTaskScheduler.html#setPoolSize-int-

问题是:您需要引用特定类ThreadPoolTaskScheduler而不是接口TaskScheduler

您需要决定是否要将引用从TaskScheduler更改为ThreadPoolTaskScheduler而不破坏代码中的任何内容

© www.soinside.com 2019 - 2024. All rights reserved.