1

Я боб для TaskScheduler и TaskExecutor следующим образом:Весна - У TaskExecutor и TaskScheduler при поддержке того же пула потоков

@Bean 
public TaskScheduler taskScheduler() { 
    ThreadPoolTaskScheduler s = new ThreadPoolTaskScheduler(); 

    s.setThreadNamePrefix("Task-Scheduler-"); 
    s.setPoolSize(10); 
    s.setRemoveOnCancelPolicy(true); 

    return s; 
} 

@Bean 
public TaskExecutor taskExecutor() { 
    ThreadPoolTaskExecutor e = new ThreadPoolTaskExecutor(); 

    e.setThreadNamePrefix("Task-Executor-"); 
    e.setMaxPoolSize(10); 
    e.setCorePoolSize(10); 

    return e; 
} 

Можно ли разделить основной пул потоков исполнителю услуги между TaskExecutor и TaskScheduler ? Теперь у меня есть два пула из 10 фиксированных потоков, но я хотел бы иметь один пул из 20 потоков.

Эти пулы будут использоваться для @Async, @Scheduled и @Retry аннотаторов.

ответ

1

Вы не можете сделать это, используя эти два класса, потому что они являются реализациями, которые полагаются на внутренний пул.

Однако вы можете реализовать свои собственные классы TaskExecutor и TaskScheduler, которые используют общий ThreadPool.

Обратите внимание, что несколько незанятых потоков не окажут большого влияния на производительность, поэтому, если вы не знаете, что наличие двух пулов является основным узким местом производительности, я не буду тратить свое время.

Смежные вопросы