Spring - 让 TaskExecutor 和 TaskScheduler 由同一个线程池支持
Spring - Have TaskExecutor and TaskScheduler backed by the same thread pool
我是 TaskScheduler 和 TaskExecutor 的 bean,如下所示:
@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 注释。
您不能使用这两个 class 来执行此操作,因为它们是依赖于内部池的实现。
但是,您可以实现自己的 TaskExecutor
和 TaskScheduler
class,它们使用共享线程池。
请注意,尽管一些空闲线程不会对性能产生太大影响,所以除非您知道拥有两个池是主要的性能瓶颈,否则我不会浪费时间。
我是 TaskScheduler 和 TaskExecutor 的 bean,如下所示:
@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 注释。
您不能使用这两个 class 来执行此操作,因为它们是依赖于内部池的实现。
但是,您可以实现自己的 TaskExecutor
和 TaskScheduler
class,它们使用共享线程池。
请注意,尽管一些空闲线程不会对性能产生太大影响,所以除非您知道拥有两个池是主要的性能瓶颈,否则我不会浪费时间。