создаю планировщик:
@Bean
TaskScheduler taskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
threadPoolTaskScheduler.setThreadNamePrefix("Test-");
return threadPoolTaskScheduler;
}
Я жду дальше:
Каждую 1 секунду запускается мой запланированный метод и запускается 5 потоков (PoolSize(5)
), и каждый поток создает мою логику. Для этого я создаю запланированный метод в компоненте @Component:
@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 секунде у меня есть полный поток сообщений и жду первого свободного потока. Если я установлю sleep(5000L)
- threadPool не сможет заполниться.
Но теперь мне нужно изменить poolSize во время выполнения. например с 5 до 10. Как я могу это сделать?