java - Spring - 让 TaskExecutor 和 TaskScheduler 由同一线程池支持

标签 java spring multithreading scheduled-tasks java.util.concurrent

我是 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 注释。

最佳答案

您无法通过使用这两个类来做到这一点,因为它们是依赖于内部池的实现。

但是,您可以实现自己的使用共享线程池的 TaskExecutorTaskScheduler 类。

请注意,尽管一些空闲线程不会对性能产生太大影响,所以除非您知道拥有两个池是主要的性能瓶颈,否则我不会浪费时间。

关于java - Spring - 让 TaskExecutor 和 TaskScheduler 由同一线程池支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315164/

相关文章:

Spring 集成 : Hooking web services to a FIFO queue

java - 使用 Spring MVC 3.0 生成/使用对称 JSON

.net - 多线程环境中的对象生存期

java - JdbcRowSet、CachedRowSet 和 WebRowSet 的区别

java - Park Unpark 开发自定义阻塞队列

java - 如何在生产环境中运行 Spring Boot 可执行 jar?

c++ - 哪些是从线程通过 PostMessage 发送 CString 的安全方法

javascript - 在多个项目之间共享 node_modules 目录

json - Spring Boot - 在 URI 处读取 CSV 文件并将其作为 JSON 返回

c - pthread_mutex_lock 等待锁定高度满足的互斥体正好 60 秒(如果互斥体无法立即锁定)